SQLite:检查表是否超过x行的最快方法

sid*_*com 7 sql sqlite

检查SQLite表是否超过100,000行的最快方法是什么?


测试表有26列和200,000,000行.

SELECT COUNT(*) FROM ( SELECT * FROM table LIMIT 100001 )
Run Code Online (Sandbox Code Playgroud)

花了0.27秒.

以下三个需要12分半钟

SELECT COUNT(*) FROM table
SELECT COUNT(*) FROM table LIMIT 100001
SELECT CASE WHEN COUNT(Id) >= 100000 THEN 1 ELSE 0 END FROM table
Run Code Online (Sandbox Code Playgroud)

usr*_*usr 3

select count(*) from (
 select top 100001 ID from T
) x
Run Code Online (Sandbox Code Playgroud)

我们需要扫描索引来回答查询。这至少将索引扫描限制为前 100001 行。如果表有 1m 行,这可以节省 90% 的工作。

(这里使用 SQL Server 语法 - 请自己翻译,因为我做不到)。

您可以选择一些索引列来代替 ID。我不知道优化器是否可以自己做到这一点。

请注意,诸如查看标识或 ID 列值之类的巧妙技巧通常不起作用。

要支持上述查询,请创建一个类型的虚拟列bit并为其建立索引。该索引将非常紧凑并且扫描速度最快。