После написания операторов SQL в MySQL, как измерить их скорость / производительность? - PullRequest
1 голос
/ 24 апреля 2010

Я видел что-то из статьи "плана выполнения":

10 rows fetched in 0.0003s (0.7344s)

(ссылка: http://explainextended.com/2009/09/18/not-in-vs-not-exists-vs-left-join-is-null-mysql/)

Как получается, что показаны 2 продолжительности?Что делать, если у меня еще нет большого набора данных.Например, если у меня есть только 20, 50 или даже всего 100 записей, я не могу точно измерить, насколько быстрее 2 разных оператора SQL сравниваются по скорости в реальной жизни?Другими словами, для точного сравнения производительности этих двух разных операторов SQL должно быть не менее сотен тысяч записей или даже миллиона записей?

Ответы [ 3 ]

1 голос
/ 24 апреля 2010

Лучший способ проверить и сравнить производительность операций часто (если не всегда!) для работы с реалистичным набором данных.

Если вы планируете иметь миллионы строк, когда ваше приложение находится в рабочем состоянии, тогда вам следует протестировать миллионы строк прямо сейчас, а не только дюжину!


Пара советов:

  • При тестировании используйте select SQL_NO_CACHE ... вместо select ...
    • Это предотвратит использование MySQL своего кеша запросов (что заставило бы первый запрос занимать обычное количество времени, а его повторный запуск выполнялся бы намного быстрее)
  • Узнайте, как использовать EXPLAIN, и поймите его вывод
  • Прочтите главу 7. Оптимизация в руководстве; -)
1 голос
/ 24 апреля 2010

По первому вопросу:

X строк (ы) выбрано в Y s (Z s)

X = количество строк (конечно); Y = время, которое потребовалось серверу MySQL для выполнения запроса (синтаксический анализ, получение, отправка); Z = время, которое результирующий набор провел в пути от сервера к клиенту;

(Источник: http://forums.mysql.com/read.php?108,51989,210628#msg-210628)

По второму вопросу вы никогда не узнаете, как выполняется запрос, если не протестируете с реалистичным количеством записей. Вот хороший пример того, как правильно провести бенчмаркинг: http://www.mysqlperformanceblog.com/2010/04/21/mysql-5-5-4-in-tpcc-like-workload/

Этот блог в целом, а также книга " High Performance MySQL " - золотая жила.

0 голосов
/ 24 апреля 2010

Обычно, когда показывается 2 раза, один - это время ЦП, а другой - время настенных часов. Я не могу вспомнить, что есть что, но похоже, что первое - это время ЦП, а второе - истекшее время.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...