Эти команды делают две вещи:
- Очистите кэш страниц, в котором хранятся страницы данных, которые уже были извлечены с диска (обычно самым большим фактором времени в запросе является доступ к диску)
- Очистите кэш плана запросов. Это означает, что серверу необходимо создать новый план запросов. Обычно это несущественно, за исключением очень больших объемов транзакций.
В основном вы получаете время, эквивалентное сценарию «наихудшего случая» - вы просто перезагружаете сервер, и в памяти ничего нет. Последующие запуски не должны оплачивать стоимость извлечения данных с диска, поскольку эти страницы уже загружены в память.
Это похоже на реальную ситуацию: вашему первому пользователю, запустившему конкретный запрос, скорее всего, придется ждать дольше, чем при последующих запусках, при условии, что вы проверяете те же данные.
Хороший метод, который мне нравится использовать, - запускаться несколько раз и брать среднее значение. Это особенно полезно в общей среде, поскольку у вас нет полного контроля над общими ресурсами, такими как tempdb.
Вы также можете использовать эти команды, чтобы получить больше информации о том, что на самом деле происходит за кулисами:
SET STATISTICS IO ON
SET STATISTICS TIME ON
Они предоставят вам подробную информацию о чтениях страниц с диска (для каждого объекта), чтениях логических страниц, времени, потраченном на составление плана, и времени, потраченном на выполнение запроса.