在SQLite中是count(*)的常量时间,如果没有,那么什么是替代?

dla*_*nod 7 sql sqlite count

我正在寻找计算大型(1500万行)表中有多少行的最佳方法.select count(*) from table;根据我在此事上发现的一些较旧的帖子,天真的方式显然是O(n),例如http://osdir.com/ml/sqlite-users/2010-07/msg00437.html.

是否有一个恒定的时间机制来获取此信息,或者失败的是直接select count(*)查询的首选替代方案?

CL.*_*CL. 5

COUNT(*)SQLite 对没有子句的情况进行了特殊优化WHERE,它会遍历表的 B 树页面并计算条目数,而无需实际加载记录。然而,这仍然需要访问表的所有数据(大记录的溢出页除外),因此运行时间仍然是 O(n)。

SQLite 不会在数据库中存储单独的记录计数,因为这会使所有更改变慢。