B.3.5 Проблемы, связанные с оптимизатором
MySQL использует оптимизатор, основанный на оценке стоимости, для определения наилучшего способа обработки запроса. Во многих случаях MySQL может рассчитать наилучший возможный план запроса, но иногда у MySQL недостаточно информации о данных, и ему приходится делать «обоснованные» предположения о данных.
В случаях, когда MySQL не выполняет «правильные» действия, доступны следующие инструменты, которые помогут MySQL:
-
Используйте оператор
EXPLAIN, чтобы получить информацию о том, как MySQL обрабатывает запрос. Для этого добавьте ключевое словоEXPLAINв начало вашего оператораSELECT:mysql>
EXPLAIN SELECT * FROM t1, t2 WHERE t1.i = t2.i;EXPLAINрассматривается более подробно в разделе 13.8.2, «Оператор EXPLAIN». Используйте
ANALYZE TABLEдля обновления распределения ключей для сканируемой таблицы. См. раздел 13.7.2.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также могут быть полезными. См. раздел 8.9.4, «Подсказки индексов». Глобальные и табличные
STRAIGHT_JOIN. См. раздел 13.2.9, «Оператор SELECT».Вы можете настроить глобальные или специфичные для потока системные переменные. Например, запустите mysqld с параметром
--max-seeks-for-key=1000или используйтеSET max_seeks_for_key=1000, чтобы указать оптимизатору предположить, что ни один поиск по ключу не приведет к более чем 1000 поискам по ключу. См. раздел 5.1.7, «Системные переменные сервера».
© 2025 Oracle
Licensed under the GPLv2 License.