У меня есть проект, где все SQL-запросы уже были написаны. Большинство из них могут быть улучшены, и я хочу это сделать.
Но как я могу проверить и проанализировать оба запроса [предварительно написанные, и я пишу те же запросы с помощью другого способа).
Я хочу анализировать запросы, если я их переписываю, тогда я могу проверить, правильно ли я сделал, или если старый запрос лучше моего.
Мне нужен инструмент анализа запросов для RDBMS на основе Mysql.
[если есть ошибка, то отредактируйте его]
MySQL имеет оператор EXPLAIN
, который сообщает вам, какой путь выполнения будет следовать движку. Вы можете использовать это, чтобы определить, какие изменения внести:
EXPLAIN SELECT foo,bar from glurch WHERE baz > 1 ORDER BY foo;
Смотрите: http://dev.mysql.com/doc/refman/5.0/en/explain-output.html
Обратите особое внимание на столбец rows
, который показывает, сколько строк таблицы должно быть проверено для выполнения этой части запроса, а также столбец Extra
, который более важно, как выполняется запрос,
Например, если вы видите "Использовать временный" в столбце Extra
, это обычно означает, что БД необходимо будет написать результаты запроса во временную таблицу (возможно, на диске), сортировать их, а затем повторно -прочитайте их (или, по крайней мере, некоторые из них).
Вы можете избежать временных таблиц и других неприятных убийц производительности, предоставив соответствующие индексы. И не только достаточно индексов, но скорее правильных индексов. Просто потому, что вы индексировали столбец, не означает, что индекс может использоваться в вашем запросе.
Когда у вас есть хороший механизм RDMBS, парсер запросов должен определить наиболее эффективный план выполнения для вашего запроса, независимо от того, как он написан.
Я имею в виду: порядок таблиц в ваших предложениях и соединениях, или порядок ваших критериев фильтра не должен иметь значения.
Первое, что нужно сделать, - это посмотреть на план выполнения и проанализировать его. Проверьте, чтобы вы добавляли индексы или, например, изменяли индексы.
Ваш вопрос также немного расплывчатый. Можете ли вы дать образец запроса, который вы хотите реорганизовать?