3.1、同一段代码,在存储过程中运行比普通SQL执行速度慢几十倍

问题:

同一段代码,在存储过程中运行比普通SQL执行速度慢几十倍

原理:

在SQL Server中有一个叫做 “Parameter sniffing”参数嗅探的特性。SQL Server在存储过程执行之前都会制定一个执行计划,导致速度较慢。

解决方式:

1、在存储过程中创建一个变量替换掉参数

CREATE PROC sp_yp_jxctj
    @varTemp1 VARCHAR(50)
AS
    BEGIN
--用变量替换掉参数,以防出现“Parameter sniffing”问题
        DECLARE @var1 VARCHAR(50) = @varTemp1 
--下面对参数的引用,都引用@var1,不要引用@varTemp1

    END; 

2、将受影响的sql语句隐藏起来,比如:

   a) 将受影响的sql语句放到某个子存储过程中,比如我们在@thedate设置成为今天后再调用一个字存储过程将@thedate作为参数传入就可以了。

   b) 使用sp_executesql来执行受影响的sql。执行计划不会被执行,除非sp_executesql语句执行完。

   c) 使用动态sql(”EXEC(@sql)”来执行受影响的sql。

猜你喜欢

转载自www.cnblogs.com/LiveYourLife/p/8993543.html
今日推荐