5.2.8 Как MySQL оптимизирует LIMIT
В некоторых случаях, когда используется LIMIT # и не используется HAVING,
MySQL будет выполнять запрос несколько иначе:
- Если при помощи
LIMITвыбираются только несколько строк, MySQL будет использовать индексы в тех некоторых случаях, когда он обычно предпочел бы делать полное сканирование таблицы. - Если
LIMIT #используется сORDER BY, MySQL закончит сортировку, как только найдет первые#строк, вместо того, чтобы сортировать всю таблицу. - При сочетании
LIMIT #сDISTINCTMySQL остановится, как только найдет#уникальных строк. - В некоторых случаях группировка
GROUP BYможет быть выполнена путем упорядоченного считывания ключа (или путем выполнения сортировки по ключу) и последующего вычисления итогового результата пока не изменится значение ключа. В этом случаеLIMIT #не будет вычислять какие-либо ненужные предложенияGROUP BY. - После того как MySQL пошлет первые
#строк клиенту, он прервет выполнение запроса (если не используетсяSQL_CALC_FOUND_ROWS). LIMIT 0всегда будет быстро возвращать пустую выборку. Эта команда полезна для проверки запроса и получения типов столбцов результата.- Если сервер для выполнения запроса использует временные таблицы,
LIMIT #применяется для вычисления того, сколько для них потребуется места.
