首页 技术交流 SqlServer 函数Declare通过传变量查询超慢解决办法 正文

SqlServer 函数Declare通过传变量查询超慢解决办法

发布日期:2024年02月19日 10:20        阅读次数:329

SQL语句中,如果通过declare定义日期等变量,SQL语句的where条件中通过变量查询变得很慢,但是如果把定义的变量改成实际的值又会很快。

DECLARE @riqi1 DATETIME,
        @riqi2 DATETIME;
SELECT @riqi1 = '2024-02-18',
       @riqi2 = '2024-02-19';
select * from t WHERE riqi >= @riqi AND riqi <= @riqi2

方法1:在语句的最后 附加一句 OPTION(RECOMPILE)

DECLARE @riqi1 DATETIME,
        @riqi2 DATETIME;
SELECT @riqi1 = '2024-02-18',
       @riqi2 = '2024-02-19';
select * from t WHERE riqi >= @riqi AND riqi <= @riqi2  OPTION(RECOMPILE)

但是需要注意,OPTION(RECOMPILE)只能放到最后,否则SQL语句会报错。

方法二:在语句后增加and RAND()>-1

DECLARE @riqi1 DATETIME,
        @riqi2 DATETIME;
SELECT @riqi1 = '2024-02-18',
       @riqi2 = '2024-02-19';
select * from t WHERE riqi >= @riqi AND riqi <= @riqi2  and RAND()>-1

加上and RAND()>-1也会重新编译。

 

3种查询执行计划:


1,传值


2,传参


3,使用OPTION(RECOMPILE),执行计划与传值一致。 实际执行时是重新编译了

 

                                                           

评论:

共 0 页 0 条记录,当前为第 1 页
    上一篇:没有了