我有一个简单的查询,例如
SELECT * FROM "mytable" where col1="foo"
Run Code Online (Sandbox Code Playgroud)
大约 0.5 秒内即可解析(700 MB 数据库文件的约 100'000 行的约 100 个结果)
然而,我一添加就ORDER BY需要120秒。
SELECT * FROM "mytable" where col1="foo" ORDER BY col2
Run Code Online (Sandbox Code Playgroud)
即使我像这样限制结果
SELECT * FROM (SELECT * FROM "mytable" where col1="foo" LIMIT 1) ORDER BY col2
Run Code Online (Sandbox Code Playgroud)
尽管实际上没有什么可排序的,但它需要 120 秒。
唯一的例外是如果我使用ORDER BY rowid(而不是ORDER BY col2)排序,或者当我这样做时(0.5秒):
SELECT * FROM "mytable" WHERE rowid IN (SELECT rowid FROM "mytable" WHERE col1="foo") ORDER BY col2
Run Code Online (Sandbox Code Playgroud)
我VACUUM检查了数据库并检查了数据库的完整性(好的),但这个问题仍然存在。我正在使用 SQLite 版本:3.7.7.1,速度下降出现在 phpLITEadmin 和我的 PHP …