B.3.5 Проблемы, связанные с оптимизатором
MySQL использует оптимизатор на основе стоимости, чтобы определить лучший способ выполнения запроса. Во многих случаях MySQL может рассчитать наилучший возможный план запроса, но иногда MySQL не имеет достаточной информации о данных и вынужден делать «обоснованные» предположения о данных.
В тех случаях, когда MySQL не делает «правильное» действие, доступны следующие инструменты для помощи MySQL:
-
Используйте оператор
EXPLAIN, чтобы получить информацию о том, как MySQL обрабатывает запрос. Для этого просто добавьте ключевое словоEXPLAINв начало вашего оператораSELECT:mysql>
EXPLAIN SELECT * FROM t1, t2 WHERE t1.i = t2.i;EXPLAINрассматривается более подробно в разделе 15.8.2, «Оператор EXPLAIN». Используйте
ANALYZE TABLEдля обновления распределения ключей для сканируемой таблицы. См. раздел 15.7.3.1, «Оператор ANALYZE TABLE».tbl_name-
Используйте
FORCE INDEXдля сканируемой таблицы, чтобы сообщить MySQL, что сканирование таблиц значительно дороже, чем использование заданного индекса:SELECT * FROM t1, t2 FORCE INDEX (index_for_column) WHERE t1.col_name=t2.col_name;
USE INDEXиIGNORE INDEXтакже могут быть полезны. См. раздел 10.9.4, «Указания по индексам». Глобальные и табличные
STRAIGHT_JOIN. См. раздел 15.2.13, «Оператор SELECT».Вы можете настроить глобальные или специфичные для потока системные переменные. Например, запустите mysqld с опцией
--max-seeks-for-key=1000или используйтеSET max_seeks_for_key=1000, чтобы сообщить оптимизатору, что ни одно сканирование ключей не приводит более чем к 1000 поисковым запросам по ключу. См. раздел 7.1.8, «Системные переменные сервера».
© 2025 Oracle
Licensed under the GPLv2 License.