Spec-Zone.ru › MySQL 5.7

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 tbl_name для обновления распределения ключей для сканируемой таблицы. См. раздел 13.7.2.1, «Оператор ANALYZE TABLE».

  • Используйте 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.
https://docs.oracle.com/cd/E17952_01/mysql-5.7-en/optimizer-issues.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API