以下SQLite查询速度很快(使用sqlite 3.7.5):
sqlite> select distinct DOB from (select * from MyTable limit 3) limit 20;
1958-11-05
1959-01-01
1963-06-07
虽然以下一个很慢(limit 20
已删除):
sqlite> select distinct DOB from (select * from MyTable limit 3);
1933-01-03
1934-12-24
1935-01-07
我发现这很令人惊讶,因为我希望内部limit
能够快速提取3行,因此外部limit 20
确实无关紧要;但是,两个查询的时间都完全不同。为什么第一个查询要快得多?
答案 0 :(得分:1)
当外部查询涉及DISTINCT时,SQLite在折叠子查询方面存在一些错误。 LIMIT将迁移到外部查询,然后需要解析DISTINCT才能生成3个不完全相同的记录(由于不同)。
相关:SQLite outer query is returning results not found in inner query
解决方法(使用OFFSET避免折叠)也适用于您的场景。