这个MySQL查询的复杂性是什么
SELECT COUNT(*) FROM MyTable;
表格中的条目数是否存储在某处并在每次插入或删除行时更新?如果是这种情况,则复杂性应为O(1)。
答案 0 :(得分:10)
这取决于存储引擎。
SELECT COUNT(*) FROM yourtable
是操作O(1)。它只需要读取这个值。来自manual:
InnoDB
不保留表中的内部行数。 (实际上,由于多版本化,这会有些复杂。)要处理SELECT COUNT(*) FROM t
语句,InnoDB
必须扫描表的索引,如果索引不完全在,则需要一些时间缓冲池。如果您的表不经常更改,使用MySQL查询缓存是一个很好的解决方案。要快速计数,您必须使用自己创建的计数器表,并让应用程序根据插入和删除更新它。如果近似行数足够,也可以使用SHOW TABLE STATUS
。请参见第13.2.13.1节“InnoDB
Performance Tuning Tips”。
答案 1 :(得分:1)
MyISAM行数中的AFAIK被缓存,在InnoDB中没有,并且每次计数都会计算所有行。
答案 2 :(得分:-3)
我不确定该值是否存储,但这对您的查询来说并不重要。 将MySQL与您的查询一起使用,它会在您执行它时计算所有返回的行。