SQLite似乎没有应用内部选择的限制

时间:2011-03-06 23:01:23

标签: sqlite performance limit

以下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确实无关紧要;但是,两个查询的时间都完全不同。为什么第一个查询要快得多?

1 个答案:

答案 0 :(得分:1)

当外部查询涉及DISTINCT时,SQLite在折叠子查询方面存在一些错误。 LIMIT将迁移到外部查询,然后需要解析DISTINCT才能生成3个不完全相同的记录(由于不同)。

相关:SQLite outer query is returning results not found in inner query

解决方法(使用OFFSET避免折叠)也适用于您的场景。