MySQL-复杂度:从MyTable中选择COUNT(*);

这个MySQL查询的复杂度是多少

SELECT COUNT(*) FROM MyTable;

表格中的条目数计数是否存储在某处并在每次插入或删除行时更新?如果是这种情况,则复杂度应为O(1)。

回答:

这取决于存储引擎。

  • 对于MyISAM,将为每个表存储总行数,因此将存储SELECT COUNT(*) FROM yourtable操作O(1)。它只需要读取此值。
  • 对于InnoDB,不存储总行数,因此需要完整扫描。这是O(n)操作。

从手册:

InnoDB不保留表中行的内部计数。(实际上,由于多版本控制,这会有些复杂。)要处理一条SELECT COUNT(*) FROM

t语句,InnoDB必须扫描表的索引,如果索引不完全在缓冲池中,则要花费一些时间。如果您的表不经常更改,那么使用MySQL查询缓存是一个很好的解决方案。为了快速计数,您必须使用自己创建的计数器表,并让您的应用程序根据插入和删除它来对其进行更新。SHOW

TABLE STATUS如果近似行数足够,也可以使用。请参见第13.2.13.1节“

InnoDB性能调优技巧

”。

以上是 MySQL-复杂度:从MyTable中选择COUNT(*); 的全部内容, 来源链接: utcz.com/qa/408209.html

回到顶部