Добавление в начало запроса SELECT ключевого слова EXPLAIN, по сути, означает для MySQL команду возвратить список с описанием прохождения этого запроса. В этом списке указываются таблицы, которые будут использоваться запросом, и количество строк, возвращаемых этим запросом. Эта информация нужна для определения того, какие таблицы следует индексировать для повышения производительности.
В качестве примера рассмотрим следующий запрос.
Теперь, после добавления ключевого слова EXPLAIN в начало запроса, становится возможным получить информацию о том, как MySQL его обрабатывает.
Чтобы упростить изложение материала, сделаем некоторые пояснения. Результат запроса EXPLAIN SELECT - таблица, показывающая все операторы SELECT в запросе, а также то, как MySQL планирует их обработать.
■ Столбец id указывает положение оператора SELECT в полном запросе, а столбец table содержит имя опрашиваемой таблицы.
■ Столбец select_type указывает тип запроса - простой запрос без подзапросов, объединение UNION, подзапрос, внешнее объединение, подзапрос во внешнем запросе или подзапрос в операторе FROM.
■ Столбец type указывает, как будет произведено объединение. Тут возможны различные значения, которые варьируются от const (лучший вид объединения, подразумевающий, что в таблице содержится единственная совпадающая запись) до ALL (наихудший вид, так как это значит, что для поиска совпадений с другими объединенными таблицами, MySQL должен сканировать все записи).
■ Столбец possible keys указывает доступные MySQL индексы для ускорения поиска.
■ Столбец key указывает на используемый ключ, а длина ключа отображается в столбце key_len.
■ Столбец rows указывает количество строк в соответствующей таблице, которые требуется проверить для выполнения запроса. Для получения общего количества строк, MySQL необходимо просканировать весь запрос и перемножить значения rows для каждой таблицы между собой.
■ Столбец Extra содержит дополнительную информацию о том, как MySQL будет обрабатывать запрос: используя предложение WHERE, используя индекс, с помощью временной таблицы и т.д.
Из вышеуказанного листинга видно, что для выполнения запроса MySQL потребуется проверить все строки в указанных таблицах. Общее количество строк, которые необходимо просканировать, приблизительно равно 934 х 134 х 621 = 77 721 876 строк!
Однако, просматривая результат работы команды EXPLAIN SELECT, легко сделать вывод, что еще остались возможности усовершенствования. Например, столбец possible keys для всех таблиц равен NULL, что указывает на то, что MySQL не может найти индексов. Это легко исправляется после просмотра таблиц и добавления индексов, везде, где это возможно.
Листинг 16.9.
mysql> ALTER TABLE Companies ADD PRIMARY KEY (companyID);
Query OK, 934 rows affected (0.18 sec)
mysql> ALTER TABLE Groups ADD INDEX (groupLabel);
Query OK, 621 rows affected (0.11 sec)
Теперь попробуем опять запустить запрос с оператором EXPLAIN повторно.
Как вы видите, теперь MySQL использует недавно добавленные индексы для уменьшения количества строк, в которых будет производиться поиск. Это видно из столбца type в вышеприведенной таблице - MySQL использует тип объединения eq_ref (лучший тип объединения, подразумевающий прочтение лишь одной строки). Умножая строки, мы увидим, что для выполнения запроса требуется просканировать только 134 х 1 х 1 = 134 строки, т.е. получен значительно лучший результат по сравнению с предыдущим подходом, в котором индексирование не применялось.
ТОП-10 популярных
Для работы с вещественными числами в MySQL предусмотрено три типа данных - это типы FLOAT, DOUBLE, DECIMAL. Числовой тип FLOAT...
БОЛЬШЕ БОЛЬШИХ LCD-мониторов
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...
Больше больших LCD-мониторов
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...
НОУТБУК с блестящим экраном
Eсли выпустившая ноутбук фирма предлагает его в качестве «замены настольному ПК», то это должно подразумевать под собой нечто большее, чем...
Eсли выпустившая ноутбук фирма предлагает его в качестве «замены настольному ПК», то это должно подразумевать под собой нечто большее, чем...
Иди и пиши. TravelMate C100
Планшетный компьютер платформы Tablet PC обязан в первую очередь быть легким, способным достаточно долго работать без подзарядки батарей. Эти требования...
Планшетный компьютер платформы Tablet PC обязан в первую очередь быть легким, способным достаточно долго работать без подзарядки батарей. Эти требования...
Магнито-оптический дисковод DynaMO
Cейчас, когда традиционные флоппи-дисководы на долгие годы замерли в своем развитии, поиск альтернативных носителей продолжается, и ситуация, казалось бы, разрешилась...
Cейчас, когда традиционные флоппи-дисководы на долгие годы замерли в своем развитии, поиск альтернативных носителей продолжается, и ситуация, казалось бы, разрешилась...
Компьютер для гурманов.«Эксимер ДМ»
Российская компания «Эксимер ДМ», известная как производитель настольных компьютеров, рабочих станций, серверов и ноутбуков, выступила техническим спонсором проведения торжеств, посвященных...
Российская компания «Эксимер ДМ», известная как производитель настольных компьютеров, рабочих станций, серверов и ноутбуков, выступила техническим спонсором проведения торжеств, посвященных...
Для длинных строк, т.е. строк длиннее 255 символов, в MySQL предусмотрены типы BLOB (Binary Large Object, большой двоичный объект) и...
В дополнение к календарным типам, предназначенным для хранения даты и времени отдельно, MySQL также поддерживает гибридные типы данных DATETIME и...
Вообще, к изменению настроек сервера прибегают очень редко. В MySQL программа заранее настроена так, чтобы соответствовать самым распространенным и основным...
Все о MySQL. Анализ запросов
28-12-2009
<< Предыдущая статья | Следующая статья >> |
Все о MySQL. Кэширование запросов | Все о MySQL. Оптимизация многотабличных запросов |