Spec-Zone.ru › MySQL 9.2

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 tbl_name для обновления распределения ключей для сканируемой таблицы. См. раздел 15.7.3.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 также могут быть полезны. См. раздел 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.
https://docs.oracle.com/cd/E17952_01/mysql-8.4-en/optimizer-issues.html

Spec-Zone.ru

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