Простая библиотека для подсказок и оптимизаций индекса mysql (USE INDEX, FORCE INDEX, IGNORE INDEX)

requires
* php: ^7.4|^8.0
* doctrine/dbal: ^3.0
* illuminate/database: ^8.0|^9.0
* illuminate/support: ^8.0|^9.0

Монтаж

composer require shaburov/laravel-mysql-index-hints-scope

Как это использовать

Расширенный класс Blueprint

В класс Blueprint добавлены следующие методы: dropIndexIfExists, hasIndex

Черта

Если индекса нет, то и ошибки не будет.

Функции:

useIndex(INDEX_NAME, (JOIN|GROUP_BY|ORDER_BY), TABLE_ALIAS);
forceIndex(INDEX_NAME, (JOIN|GROUP_BY|ORDER_BY), TABLE_ALIAS);
ignoreIndex((INDEX_NAME|[INDEX_NAME,INDEX_NAME]),(JOIN|GROUP_BY|ORDER_BY),TABLE_ALIAS);

Константы:

  • IndexHintsConstants: ПРИСОЕДИНЯЙТЕСЬ;
  • IndexHintsConstants:GROUP_BY;
  • IndexHintsConstants:ORDER_BY;

Примеры

Подсказки индексов дают оптимизатору информацию о том, как выбирать индексы во время обработки запроса. Подсказки индекса, описанные здесь, отличаются от подсказок оптимизатора, описанных в Разделе 8.9.3, «Подсказки оптимизатора». Подсказки индекса и оптимизатора могут использоваться отдельно или вместе.

Подсказки индекса применяются только к операторам SELECT и UPDATE.

Подсказки индекса указываются после имени таблицы. (Общий синтаксис для указания таблиц в операторе SELECT см. в разделе 13.2.9.2, «Предложение JOIN».) Синтаксис для ссылки на отдельную таблицу, включая подсказки индекса, выглядит следующим образом:

tbl_name [[AS] alias] [index_hint_list]
index_hint_list:
 index_hint [index_hint] ...
index_hint:
 USE {INDEX|KEY}
 [FOR {JOIN|ORDER BY|GROUP BY}] ([index_list])
 | {IGNORE|FORCE} {INDEX|KEY}
 [FOR {JOIN|ORDER BY|GROUP BY}] (index_list)
index_list:
 index_name [, index_name] ...

Официальная документация MySQL
Index Hints https://dev.mysql.com/doc/refman/5.7/en/index-hints.html
репозиторий Github
https://github .com/ishaburov/laravel-mysql-index-hints-scope
Документация Laravel
https://laravel.com/docs/9.x