Перевод хороший, статья не о чем. Про explain и так понятно, что средство мощное, вот если бы примеры позаковырестее, не такие явные, было бы и интересно и полезно.
Не согласен с тем что с помощью EXPLAIN можно эфективно обнаруживать медленные запросы, потому что на детальный анализ большого числа различных возможных запросов (на CMS около 100) с помощью которых работает сложное веб-приложение будет потрачено слишком много времени.
Для обнаружения медленных запросов можно использовать журнал медленных запросов, а после того как такие запросы будут выявлены провести их анализ с помощью EXPLAIN
Большинство запросов можно и на глаз анализировать, и увидеть есть в них проблемы или нет.
И уже потом если что-то вызывает подозрение можно EXPLAIN-ить их.
Также нужно учитывать какие запросы с какой переодичностью выполняются, если это например ежечасовый подсчет рейтинга по крону то 5-10 сек. можно ему и дать на обработку.
Если же запрос выполняется очень часто, то и 1 (а то и меньше) сек. может стать раковой...
Кстати в MySQL 5.1 есть возможность писать slow query log в таблицу, детальнее тут: http://www.mysqlperformanceblog.com/2007…
Анализ запросов становиться еще более удобным, и можно даже автоматизировать процесс.
Не обязательно запросы могут быть "медленные". Вы можете написать запрос который будет выполнятся быстро, но сильно нагружать сревер, при частом выполнении будет жрать стлько ресурсов, сколько все "медленные" вместе взятые, которые выполняются изредко.
совершенно некорректный пример
читай внимательнее: "Вы можете написать запрос который будет выполнятся быстро, но сильно нагружать сревер, при частом выполнении будет жрать стлько ресурсов, сколько все "медленные" вместе взятые, которые выполняются изредко."
перевожу: _1_ _быстрый_ _запрос_ который будет выполняться долго
1 запрос с WHERE `id` = 666, с выставленным индексом по `id` будет выполняться быстрее любого запроса по неиндексированной таблице
Ага, видимо я понял про другую неоптимизированность (которую как раз ловят журналированием запросов). Тогда с тебя пример "быстрого запроса, выполняющегося долго".
ты можешь представить цифры, когда такой простой запрос будет выполняться медленнее?
ну и желательно - описать примерную ситуацию, когда на N лёгких запросов будет выполняться 1 тяжёлый
при этом N лёгких будут перевешивать сложный
Представить цифры - вряд ли, да и неохота. Могу описать иногда возникающую ситуацию: инициализируется одновременно много объектов через ORM, для получения нескольких полей этих объектов. Выполнение одного сложного, но специально заточенного запроса - быстрее.
"Выполнение одного сложного, но специально заточенного запроса - быстрее."
с этого места поподробнее
очень хотелось бы узнать критерии оценки "сложный" / "простой" запрос...
«Быстрые запросы», которые жрут много ресурсов xD
Я представляю такое только с фулсканом индексов (не таблиц). Проблемы с этим возникают только в HA на OLTP в многопроцессорных системах (из опыта). Синхронизация кешей процессоров. Но в этот момент запросы перестанут быть быстрыми.
EXPLAIN — Самая мощная команда MySQL