Я видел что-то из статьи "плана выполнения":
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-оператора выдерживают сравнение с точки зрения скорости в реальной ситуации? Другими словами, должны быть, по крайней мере, сотни тысяч записей, или даже миллион записей на точно сравнивает производительность тех 2 различных SQL-операторов?
По вашему первому вопросу:
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 » - это золотая жила.
Лучший способ проверить и сравнить производительность операций - часто (если не всегда!) работать с реалистичным набором данных .
Если вы планируете иметь миллионы строк, когда ваше приложение находится в рабочей среде, то вам следует прямо сейчас протестировать миллионы строк, а не только дюжину!
Пара советов:
select SQL_NO_CACHE ...
вместо select ...
EXPLAIN
, и поймите его вывод Обычно, когда показано 2 раза, один - ЦП время, а один - время настенных часов. Я не могу вспомнить, что есть что, но похоже, что первое - это время процессора, а второе - прошедшее время.