22 June 2007

EXPLAIN — Самая мощная команда MySQL

MySQL
Original author: Justin Silverton
Самая мощная команда в MySQL – это EXPLAIN. EXPLAIN может в точности рассказать вам, что происходит, когда вы выполняете запрос. Эта информация позволит вам обнаружить медленные запросы и сократить время, затрачиваемое на обработку запроса, что впоследствии может значительно ускорить работу вашего приложения.

Как использовать команду EXPLAIN


Вот очень простой пример использования этой команды:

Схема базы данных:

(таблица с пользователями users)


(таблица с адресами address)


В этом примере производится выборка данных пользователя на основе его идентификатора (userid).
Вот то, что мы имеем в результате выполнения запроса EXPLAIN:

Переменная Значение
Идентификатор (ID) таблицы в запросе. EXPLAIN создает по одной записи для каждой таблицы в запросе.
Возможные значения: SIMPLE, PRIMARY, UNION, DEPENDENT UNION, SUBSELECT, и DERIVED.
Имя таблицы, из которой MySQL читает данные
Тип объединения, которое использует MySQL. Возможные значения: eq_ref, ref, range, index, или all.
Список индексов (или NULL, если индексов нет), которые MySQL может использовать для выборки рядов в таблице.
Название индекса, который использует MySQL (после проверки всех возможных индексов).
Размер ключа в байтах.
Колонки или значения, которые используются для сравнения с ключем.
Количество рядов, которые MySQL необходимо проверить, для обработки запроса.
Дополнительная информация о запросе.

Этот пример достаточно прост. Мы производим поиск по первичному ключу (userid) и может быть только одна запись, которая подойдет нашим условиям (переменная rows равна 1).

Вот более расширенный пример:

Этот запрос более расширенный, чем первый. Он производит объединение таблиц users и address на основе userid. Поле userid – это первичный ключ таблицы users, но он не является индексом в таблице address. Результат выполнения команды EXPLAIN в этом случае будет следующий:
(таблица users)
Type: const
Possible_Keys: primary
Ref: const
(таблица address)
Type: all
Possible_Keys: (ничего)
Ref: (ничего)

Первая таблица является оптимизированной. Для выполнения запроса используется первичный ключ. Вторая таблица неоптимизирована. Значением параметра type является all, а Possible_keys пустой, что означает, что будет производиться полное сканирование таблицы. Добавление индекса к полю user второй таблицы сделает ее оптимизированной.
Результат вывода команды EXPLAIN после оптимизации второй таблицы будет следующим:
(таблица users)
Type: const
Possible_Keys: primary
Ref: const
(таблица address)
Type: const
Possible_Keys: primary
Ref: const

Дополнительную информацию о команде EXPLAIN вы можете найти в официальной документации MySQL: dev.mysql.com/doc/refman/5.0/en/explain.html
Tags:mysqlsqlбазы данныхбдоптимизацияexplainиндексыключи
Hubs: MySQL
+18
126.2k 229
Comments 33