Как переписать запросы SQL, которые дают лучшую производительность в MySQL

0

У меня есть проект, где все SQL-запросы уже были написаны. Большинство из них могут быть улучшены, и я хочу это сделать.

Но как я могу проверить и проанализировать оба запроса [предварительно написанные, и я пишу те же запросы с помощью другого способа).

Я хочу анализировать запросы, если я их переписываю, тогда я могу проверить, правильно ли я сделал, или если старый запрос лучше моего.

Мне нужен инструмент анализа запросов для RDBMS на основе Mysql.

[если есть ошибка, то отредактируйте его]

  • 4
    Любой конкретный запрос в виду? Это очень широкий вопрос.
  • 1
    Я предлагаю использовать «EXPLAIN <query>» в MySQL. Он не расскажет, как оптимизировать ваш запрос, но даст вам некоторую полезную информацию о вашем запросе, которую вы можете использовать для «оптимизации вашего запроса».
Показать ещё 1 комментарий
Теги:
database

2 ответа

0
Лучший ответ

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, это обычно означает, что БД необходимо будет написать результаты запроса во временную таблицу (возможно, на диске), сортировать их, а затем повторно -прочитайте их (или, по крайней мере, некоторые из них).

Вы можете избежать временных таблиц и других неприятных убийц производительности, предоставив соответствующие индексы. И не только достаточно индексов, но скорее правильных индексов. Просто потому, что вы индексировали столбец, не означает, что индекс может использоваться в вашем запросе.

0

Когда у вас есть хороший механизм RDMBS, парсер запросов должен определить наиболее эффективный план выполнения для вашего запроса, независимо от того, как он написан.
Я имею в виду: порядок таблиц в ваших предложениях и соединениях, или порядок ваших критериев фильтра не должен иметь значения.

Первое, что нужно сделать, - это посмотреть на план выполнения и проанализировать его. Проверьте, чтобы вы добавляли индексы или, например, изменяли индексы.

Ваш вопрос также немного расплывчатый. Можете ли вы дать образец запроса, который вы хотите реорганизовать?

  • 1
    Акцент на «должен»; Кроме того, вам нужно хорошо структурировать базу данных - оптимизатор может попробовать все, что хочет, оптимизировать таблицу без каких-либо индексов, но запрос все равно будет медленным.
  • 0
    Многие утверждают, что «хороший движок RDMBS» и «MySQL» противоречивы. Конечно, его оптимизатор запросов не прилагает столько же усилий для оптимизации сложных запросов, сколько другие базы данных. (Обратной стороной этого является то, что его оптимизатор не такой медленный, что важно, если вы готовите много запросов.)
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню