Простая библиотека для подсказок и оптимизаций индекса 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