Сортировка файлов с оптимизацией малого LIMIT
Описание оптимизации
Когда n достаточно мало, оптимизатор использует очередь с приоритетами для сортировки. До переноса оптимизации в MariaDB 10.0, альтернативой, грубо говоря, было сортировать весь вывод, а затем выбирать только первые n строки.
Видимость оптимизации в MariaDB
Существует два способа проверки, использовала ли сортировка файлов очередь с приоритетами.
Переменная состояния
Первый способ — проверить переменную состояния Sort_priority_queue_sorts. Она показывает количество раз, когда сортировка производилась с помощью очереди с приоритетами. (Общее количество раз, когда производилась сортировка, является суммой Sort_range и Sort_scan).
Журнал медленных запросов
Второй способ — проверить журнал медленных запросов. При использовании расширенной статистики в журнале медленных запросов и указании log_slow_verbosity=query_plan, записи журнала медленных запросов выглядят так
# Time: 140714 18:30:39 # User@Host: root[root] @ localhost [] # Thread_id: 3 Schema: test QC_hit: No # Query_time: 0.053857 Lock_time: 0.000188 Rows_sent: 11 Rows_examined: 100011 # Full_scan: Yes Full_join: No Tmp_table: No Tmp_table_on_disk: No # Filesort: Yes Filesort_on_disk: No Merge_passes: 0 Priority_queue: Yes SET timestamp=1405348239;SET timestamp=1405348239; select * from t1 where col1 between 10 and 20 order by col2 limit 100;
Обратите внимание на «Priority_queue: Yes» в последней строке комментария. (pt-query-digest может анализировать журналы медленных запросов с полем Priority_queue)
Что касается EXPLAIN, она не даст никаких указаний на то, использует ли filesort очередь с приоритетами или общий алгоритм быстрой сортировки и слияния. Using filesort будет показано в обоих случаях, как в MariaDB, так и в MySQL.
См. также
- Страница оптимизации LIMIT в руководстве MySQL 5.6 (поиск по «очереди с приоритетами»).
- Запись WorkLog MySQL, WL#1393
- MDEV-415, MDEV-6430
© 2023 MariaDB
Licensed under the Creative Commons Attribution 3.0 Unported License and the GNU Free Documentation License.
https://mariadb.com/kb/en/filesort-with-small-limit-optimization/