SQL Server: эффекты использования "с перекомпиляцией" в определении proc?
мое понимание WITH RECOMPILE
опция с хранимыми процедурами обычно ограничивается использованием предложения с одним сохраненным вызовом proc в качестве конечного параметра:
exec sp_mystoredproc 'Parameter1', 2, '1/28/2011' with recompile
каковы последствия включения WITH RECOMPILE
в фактическом определении proc? Это перекомпилирует proc каждый раз, когда он выполняется? Или просто в следующий раз, когда proc будет изменен?
пример:
CREATE PROCEDURE [dbo].[sp_mystoredproc]
(@string1 varchar(8000)
,@int2 int = 2
,@dt_begin DATETIME
with recompile
AS
... proc code ...
1 ответов
это заставляет proc перестраивать планы всех запросов каждый раз, когда он запускается.
полезно это значения параметров proc влияют на избирательность фильтра.
говорят, оптимальный план для этого запроса:
SELECT *
FROM orders
WHERE order_date BETWEEN @begin_report AND @from_report
будет полное сканирование, если диапазон дат большие или сканирование индекса, если он маленький.
созданные с помощью WITH RECOMPILE
, proc построит план на каждом выполнении; без одного он будет придерживаться одного плана (но будет экономия времени на самой перекомпиляции).
эта подсказка обычно используется в процедурах обработки больших объемов данных и выполнения сложных отчетов, когда общее время запроса велико, а время восстановления плана незначительно по сравнению со временем, сэкономленным лучшим планом.