SQLite не применяет ограничение внутреннего выбора - PullRequest
0 голосов
/ 07 марта 2011

Следующий запрос 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

IЭто удивительно, потому что я ожидаю, что внутренний limit быстро извлечет только 3 строки, так что внешний limit 20 действительно не имеет значения;однако сроки обоих запросов совершенно разные.Почему первый запрос намного быстрее?

1 Ответ

1 голос
/ 07 марта 2011

SQLite имеет некоторые ошибки в сворачивании подзапросов, когда внешний запрос включает DISTINCT.LIMIT переносится на внешний запрос, который затем требует разрешения DISTINCT, прежде чем он сможет создать 3 записи, которые не являются одинаковыми (из-за отличия).

Related: Возвращается внешний запрос SQLiteрезультаты не найдены во внутреннем запросе

Обходной путь (с помощью OFFSET, чтобы избежать свертывания) также может работать для вашего сценария.

...