Контрольная функция в Mysql (Невероятные результаты) - PullRequest
2 голосов
/ 02 мая 2010

У меня есть 2 таблицы:

автор с 3 миллионами строк.

книга с 20 милями строк.

.

Итак, я сопоставил этот запрос с объединением:

SELECT BENCHMARK(100000000, 'SELECT book.title, author.name
FROM `book` , `author` WHERE book.id = author.book_id ')

И вот результат:

Запрос занял 0,7438 с

ТОЛЬКО 0,7438 секунд на 100 миллионов запросов с объединением ???

Я делаю какие-то ошибки или это правильный результат?

1 Ответ

3 голосов
/ 02 мая 2010

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

BENCHMARK () предназначен для тестирования скалярных выражений, а не для тестирования времени выполнения запросов.Запрос на самом деле не выполняется.В моем собственном тестировании запросов длительность не была связана ни со сложностью запроса, а только с количеством выполняемых испытаний.

Взгляните на http://dev.mysql.com/doc/refman/5.0/en/information-functions.html#function_benchmark

Несколько цитат из документа:

"BENCHMARK () предназначен для измерения производительности скалярных выражений во время выполнения,"

"Можно использовать только скалярные выражения. Хотя выражение может бытьподзапрос, он должен возвращать один столбец и не более одной строки. Например, BENCHMARK (10, (SELECT * FROM t)) завершится ошибкой, если таблица t имеет более одного столбца или более одной строки. "

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

Если вы хотите выполнить тесты, возможно, стоит сделать это из кода приложения (и возможно с помощью директивы no cache)в зависимости от того, как напиши тяжело будет твоя среда разработки.).Выполнение этого из кода приложения также будет учитывать время для гидратации данных, а также стоимость отправки данных по проводам и т. Д.

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