Ответ 1
Это заставляет proc восстанавливать планы всех запросов каждый раз, когда он запускается.
Полезно, что значения параметров proc влияют на селективность фильтра.
Скажем, оптимальный план для этого запроса:
SELECT *
FROM orders
WHERE order_date BETWEEN @begin_report AND @from_report
будет полным сканированием, если диапазон дат большой или сканирование индекса, если оно мало.
Созданный с использованием WITH RECOMPILE
, proc будет строить план при каждом выполнении; без него он будет придерживаться единого плана (но сэкономит время на самой перекомпиляции).
Этот совет обычно используется в обработке обработок больших объемов данных и выполнении сложных отчетов, когда общее время запроса велико, и время для восстановления плана незначительно по сравнению с временем, сохраненным лучшим планом.