检查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)
select count(*) from (
select top 100001 ID from T
) x
Run Code Online (Sandbox Code Playgroud)
我们需要扫描索引来回答查询。这至少将索引扫描限制为前 100001 行。如果表有 1m 行,这可以节省 90% 的工作。
(这里使用 SQL Server 语法 - 请自己翻译,因为我做不到)。
您可以选择一些索引列来代替 ID。我不知道优化器是否可以自己做到这一点。
请注意,诸如查看标识或 ID 列值之类的巧妙技巧通常不起作用。
要支持上述查询,请创建一个类型的虚拟列bit并为其建立索引。该索引将非常紧凑并且扫描速度最快。
| 归档时间: |
|
| 查看次数: |
2164 次 |
| 最近记录: |