2010-09-21 7 views
17

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

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

+0

Привет, я просто поставил это под сомнение. MSSQL – User7354632781

ответ

26
SET STATISTICS IO ON 
SET STATISTICS TIME ON 

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

+8

@CombatCaptain. Вы также можете складывать сравнение запросов в SSMS и нажимать 'CTRL + M' (включая фактический план выполнения), а затем' F5'. Затем наведите указатель мыши на первый узел на вкладке «Фактический план выполнения» и прочитайте «Оценочная стоимость субтитров». –

+2

Эти утверждения обычно не поддерживаются. ERROR [15001] Синтаксическая ошибка произошла или раньше: SET STATISTICS IO ON – dokaspar

2

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

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

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

3

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

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

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

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

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

0

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

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

Смежные вопросы