【发布时间】:2014-08-03 00:57:00
【问题描述】:
我想在我的 sqlite 数据库中查询所有大于 20 的“级别”值,将结果限制为 100 并按 rowid 排序。
当按 rowid 排序时,查询要慢得多。该数据库包含约 300 万条记录 level的最大值为50。为level创建一个索引。
这个语句需要大约 20 毫秒:
SELECT * FROM log WHERE level > 20 LIMIT 100
这条语句需要大约 100 毫秒:
SELECT * FROM log WHERE level > 20 ORDER BY rowid LIMIT 100
此语句耗时约 1000 毫秒(不存在级别值大于 50 的行):
SELECT * FROM log WHERE level > 50 ORDER BY rowid LIMIT 100
有没有办法对此进行优化以加快 ORDER BY 查询?
这是使用的索引:
CREATE INDEX level_idx ON table (level)
【问题讨论】:
-
你有索引吗?
-
我会检查索引及其碎片,我会尝试读取未提交的内容,更新统计信息,并将列限制为仅需要的列。
-
嗨,CL,我更新了这个问题。我在级别上使用索引。