Улучшения в оптимизации ORDER BY
MariaDB 10.1 включает несколько улучшений оптимизатора ORDER BY.
Исправления были внесены в ответ на жалобы пользователей MariaDB, поэтому они решают реальные проблемы оптимизации. Исправления немного сложно описать (так как оптимизатор ORDER BY сложный), но вот краткое описание:
Оптимизатор ORDER BY в MariaDB 10.1:
- Не делает глупых выборов, когда присутствуют несколько многокомпонентных ключей и потенциальные диапазонные доступа (MDEV-6402).
- Это также исправляет ошибку MySQL Bug#12113.
- Всегда использует «диапазон» и (не полный «сканирование индекса»), когда переключается на индекс для удовлетворения
ORDER BY … LIMIT(MDEV-6657). - Пытается быть умным и использовать оценки стоимости/количества записей из других частей оптимизатора (MDEV-6384, MDEV-465).
- Это изменение также исправляет ошибку MySQL Bug#36817.
- Полностью использует функцию Расширенных ключей InnoDB при проверке, можно ли пропустить filesort() (MDEV-6796).
Дополнительные оптимизации
Начиная с MariaDB 10.1.15
- Оптимизатор ORDER BY учитывает множественные равенства (MDEV-8989). Эта оптимизация по умолчанию не включена в MariaDB 10.1. Вам необходимо явно включить ее, установив системную переменную optimizer_switch следующим образом:
optimizer_switch='orderby_uses_equalities=on'
Включение переключателя считается безопасным. По умолчанию он выключен в MariaDB 10.1, чтобы избежать изменения планов запросов в стабильной версии выпуска. По умолчанию он включен в MariaDB 10.2
Сравнение с MySQL 5.7
В журнале изменений MySQL 5.7 можно найти этот фрагмент:
Включение переключения индекса на основе стоимости из-за небольшой границы (WL#6986) : Мы приняли решение в make_join_select() о том, следует ли переключаться на новый индекс для поддержки «ORDER BY ... LIMIT N» на основе стоимости. Эта работа исправляет ошибку Bug#73837.
MariaDB не использует исправление Oracle (мы считаем, что make_join_select не является правильным местом для оптимизации ORDER BY), но эффект тот же: этот случай покрывается оптимизатором MariaDB 10.1.
См. также
© 2023 MariaDB
Licensed under the Creative Commons Attribution 3.0 Unported License and the GNU Free Documentation License.
https://mariadb.com/kb/en/improvements-to-order-by/