8.8.1 Оптимизация запросов с помощью EXPLAIN
Оператор EXPLAIN предоставляет информацию о том, как MySQL выполняет операторы:
EXPLAINработает с операторамиSELECT,DELETE,INSERT,REPLACEиUPDATE.При использовании
EXPLAINс оператором, подлежащим объяснению, MySQL отображает информацию из оптимизатора о плане выполнения оператора. То есть, MySQL объясняет, как он обработает оператор, включая информацию о том, как таблицы объединяются и в каком порядке. Сведения о примененииEXPLAINдля получения информации о плане выполнения см. в разделе 8.8.2, «Формат вывода EXPLAIN».При использовании
EXPLAINсFOR CONNECTIONвместо оператора, подлежащего объяснению, он отображает план выполнения оператора, выполняющегося в указанном соединении. См. раздел 8.8.4, «Получение информации о плане выполнения для указанного соединения».connection_idДля операторов
SELECT,EXPLAINгенерирует дополнительную информацию о плане выполнения, которую можно отобразить с помощьюSHOW WARNINGS. См. раздел 8.8.3, «Расширенный формат вывода EXPLAIN».EXPLAINполезен для анализа запросов, связанных с разбиением таблиц. См. раздел 22.3.5, «Получение информации о разбиениях».Опция
FORMATможет использоваться для выбора формата вывода.TRADITIONALпредставляет вывод в табличном формате. Это значение по умолчанию, если опцияFORMATотсутствует.JSONформат отображает информацию в формате JSON.
С помощью EXPLAIN вы можете определить, где следует добавить индексы в таблицы, чтобы оператор выполнялся быстрее, используя индексы для поиска строк. Вы также можете использовать EXPLAIN для проверки, объединяют ли оптимизатор таблицы в оптимальном порядке. Для того, чтобы дать подсказку оптимизатору использовать порядок объединения, соответствующий порядку указания таблиц в операторе SELECT, начните оператор с SELECT STRAIGHT_JOIN, а не только с SELECT. (См. раздел 13.2.9, «Оператор SELECT».) Однако, STRAIGHT_JOIN может помешать использованию индексов, так как он отключает преобразования полусоединений. См. раздел 8.2.2.1, «Оптимизация подзапросов, производных таблиц и ссылок на представления с помощью преобразований полусоединений».
Иногда трассировка оптимизатора предоставляет информацию, дополняющую информацию от EXPLAIN. Однако, формат и содержание трассировки оптимизатора могут меняться между версиями. Для получения подробностей см. раздел 8.15, «Отслеживание оптимизатора».
Если у вас есть проблема с тем, что индексы не используются, хотя, по вашему мнению, они должны использоваться, запустите ANALYZE
TABLE для обновления статистических данных таблицы, таких как кардинальность ключей, которые могут повлиять на выбор оптимизатора. См. раздел 13.7.2.1, «Оператор ANALYZE TABLE».
EXPLAIN также может использоваться для получения информации о столбцах в таблице. EXPLAIN
является синонимом tbl_nameDESCRIBE
и tbl_nameSHOW COLUMNS FROM
. Более подробная информация находится в разделе 13.8.1, «Оператор DESCRIBE» и разделе 13.7.5.5, «Оператор SHOW COLUMNS».tbl_name
© 2025 Oracle
Licensed under the GPLv2 License.