我有这个存储过程..当我告诉开发人员不推荐使用 Recompile 选项时,他们回答说“这是因为可以使用许多不同的参数调用这个 SP,我们希望优化器获取一个新计划每次调用(不理想,但与使用旧的缓存计划相比,这是一次尝试让它运行得更可靠、速度更快)”
他们说的对吗?有什么方法可以不用重新编译就可以做到这一点
create PROCEDURE [dbo].[VERIFIER_QUEUE]
@cas_name varchar(20) = NULL,
@instance_name varchar(50) = NULL,
@verifier_id int = NULL,
@applicant_type VARCHAR(20) = NULL
WITH RECOMPILE
AS
BEGIN
SET NOCOUNT ON
DECLARE @cas_name_x varchar(20)
DECLARE @instance_name_x varchar(50)
DECLARE @verifier_id_x int
DECLARE @InstanceId INT
...............
Run Code Online (Sandbox Code Playgroud) performance sql-server optimization execution-plan query-performance
我知道重新编译是什么意思,我知道由于性能问题,没有 dmv 等,大多数时候不建议使用它。
有时在某些情况下它可能有所帮助,但OPTION(RECOMPILE)
也可能有所帮助。
那么,什么时候最好使用With Recompile
over OPTION(RECOMPILE)
?
谢谢。