ИНДЕКС ПРИНУЖДЕНИЯ
Описание
Принуждение к использованию индекса в основном полезно, когда оптимизатор решает выполнить сканирование таблицы, даже если известно, что использование индекса было бы лучше. (Оптимизатор может решить выполнить сканирование таблицы, даже если доступен индекс, когда он считает, что большинство или все строки будут совпадать, и он может избежать накладных расходов на использование индекса).
FORCE INDEX работает, учитывая только заданные индексы (как и в USE_INDEX), но дополнительно он сообщает оптимизатору рассматривать сканирование таблицы как очень дорогостоящую операцию. Однако если ни один из «принудительных» индексов не может быть использован, то сканирование таблицы всё равно будет выполнено.
FORCE INDEX не может принудить к использованию проигнорированного индекса — он будет обрабатываться так, как будто его не существует.
Пример
CREATE INDEX Name ON City (Name); EXPLAIN SELECT Name,CountryCode FROM City FORCE INDEX (Name) WHERE name>="A" and CountryCode >="A";
Это даёт:
id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE City range Name Name 35 NULL 4079 Using where
Префиксы индексов
При использовании подсказок индекса (USE, FORCE или IGNORE INDEX) имя индекса также может быть недвусмысленным префиксом имени индекса.
См. также
- Подсказки индексов: как принудить планы запросов для более подробной информации
- USE 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/force-index/