Подтвердить что ты не робот

Как сравнить два запроса?

Как я могу сравнить два запроса X и Y и сказать, что X лучше, чем Y, когда они оба принимают почти одно и то же время в сценариях небольших случаев?

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

4b9b3361

Ответ 1

SET STATISTICS IO ON
SET STATISTICS TIME ON

Запуск запросов и сравнение логических чтений для разных таблиц и времени выполнения.

Ответ 2

Как уже упоминалось, проверьте планы выполнения.

Важно, сравните 2 запроса справедливо, очистив кеш вниз между каждым прогоном, просто чтобы убедиться, что вы не видите искаженные результаты из-за влияния данных, которые уже кэшируются (не запускайте на рабочем сервере):

DBCC DROPCLEANBUFFERS -- clear proc plan cache
DBCC FREEPROCCACHE -- clear data cache

Тогда то, что я обычно делаю, это проверить чтения, записи, процессор и продолжительность для сравнения.

Очень важно, чтобы вы тестировали объемы данных на уровне производства (и в идеале больше, чтобы посмотреть, как он будет масштабироваться). В этих томах вы действительно увидите разницу в производительности. Тестирование с небольшими объемами данных может оставить вас открытыми для проблем в дальнейшем.

Ответ 3

Вы изучили планы запросов? Если запросы возвращают одни и те же данные и выполняют одинаковое количество времени для выполнения, я предполагаю, что планы запросов будут почти идентичными, что означает, что между этими двумя запросами нет значимой разницы.

Также, вы учли, что запросы выполняются по-разному по мере изменения размера базы данных?

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

Ответ 4

Оценка производительности запросов в существенно отличающемся наборе данных обычно имеет мало смысла. Планы запросов и их эффективность могут сильно различаться в зависимости от статистики данных.

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