我对存储过程的WITH RECOMPILE选项的理解通常仅限于使用带有单个存储过程调用的子句作为尾随参数:
exec sp_mystoredproc 'Parameter1', 2, '1/28/2011' with recompile在实际的proc定义中包含WITH RECOMPILE会有什么影响?这会在每次执行时重新编译proc吗?或者只是在下一次修改proc时?
示例:
CREATE PROCEDURE [dbo].[sp_mystoredproc]
(@string1 varchar(8000)
,@int2 int = 2
,@dt_begin DATETIME
with recompile
AS
... proc code ...发布于 2011-01-29 01:21:37
这使得proc在每次运行时重新构建所有查询的计划。
有用的是,proc参数值会影响滤波器的选择性。
比方说,此查询的最佳计划:
SELECT *
FROM orders
WHERE order_date BETWEEN @begin_report AND @from_report如果日期范围较大,则为完整扫描;如果日期范围较小,则为索引扫描。
使用WITH RECOMPILE创建的proc将在每次执行时构建计划;如果没有计划,它将坚持使用单个计划(但将节省重新编译本身的时间)。
当总体查询时间较长,重建计划的时间与更好的计划节省的时间相比可以忽略不计时,通常在处理大量数据和执行复杂报表时使用此提示。
https://stackoverflow.com/questions/4831085
复制相似问题