Подсказки оптимизатора
Подсказки оптимизатора
В SELECT есть некоторые параметры, влияющие на план выполнения. Они известны как подсказки оптимизатора.
HIGH PRIORITY
HIGH_PRIORITY присваивает запросу более высокий приоритет. Если таблица заблокирована, запросы с высоким приоритетом SELECT будут выполнены как только блокировка будет снята, даже если другие запросы находятся в очереди. HIGH_PRIORITY применяется только если система хранения данных поддерживает только блокировку на уровне таблицы (MyISAM, MEMORY, MERGE). Подробности см. в разделе HIGH_PRIORITY и LOW_PRIORITY.
SQL_CACHE / SQL_NO_CACHE
Если системная переменная query_cache_type установлена в значение 2 или DEMAND, а текущий запрос может быть кэширован, SQL_CACHE заставляет запрос кэшироваться, а SQL_NO_CACHE — не кэшироваться. Для UNION следует указать SQL_CACHE или SQL_NO_CACHE для первого запроса. Подробнее см. также раздел Кэш запросов и список типов запросов, которые не могут быть кэшированы.
SQL_BUFFER_RESULT
SQL_BUFFER_RESULT заставляет оптимизатор использовать временную таблицу для обработки результата. Это полезно, чтобы как можно скорее освободить блокировки.
SQL_SMALL_RESULT / SQL_BIG_RESULT
SQL_SMALL_RESULT и SQL_BIG_RESULT сообщают оптимизатору, является ли результат очень большим. Обычно операции GROUP BY и DISTINCT выполняются с использованием временной таблицы. Только если результат очень большой, использование временной таблицы неудобно. Оптимизатор автоматически определяет, слишком ли большой результат, но вы можете принудительно заставить оптимизатор использовать временную таблицу с SQL_SMALL_RESULT, или избежать использования временной таблицы с помощью SQL_BIG_RESULT.
STRAIGHT_JOIN
STRAIGHT_JOIN применяется к запросам JOIN и сообщает оптимизатору, что таблицы должны считываться в порядке их появления в SELECT. Для const и system таблиц этот параметр иногда игнорируется.
SQL_CALC_FOUND_ROWS
SQL_CALC_FOUND_ROWS применяется только при использовании LIMIT условия. Если этот параметр используется, MariaDB посчитает количество строк, которые соответствовали бы запросу без LIMIT условия. Это число можно получить в следующем запросе, используя FOUND_ROWS().
USE/FORCE/IGNORE INDEX
USE INDEX, FORCE INDEX и IGNORE INDEX ограничивают планирование запроса определенным индексом.
Дополнительную информацию о некоторых из этих параметров см. в разделе Принудительное задание планов запросов.
© 2023 MariaDB
Licensed under the Creative Commons Attribution 3.0 Unported License and the GNU Free Documentation License.
https://mariadb.com/kb/en/optimizer-hints/