我用来写这样的查询:
SELECT *
FROM myTable
WHERE COl1 = @Param1 OR @Param1 Is NUll
以上用于执行查找和体面的速度。但现在需要17秒。
如果我删除
OR @Param1 Is NULL
执行时间不到1秒。
SELECT *
FROM myTable
WHERE COl1 = @Param1
Executes less that 1 sec
任何想法为什么OR @ Param1为Null会给执行增加16秒?
我多年来一直在使用这种查询方式,并且没有注意到任何性能损失。
查询基本上是说如果@ param1为null则给我的ALL记录,否则只给我记录那些@taram1
答案 0 :(得分:1)
由于您传递@ Param1,您可以采用基于程序的方法,如我原始评论中的链接所述。这看起来如下:
CREATE PROC getData
@Param1 varchar(255) = NULL
AS
BEGIN
IF(@Param1 IS NULL)
BEGIN
SELECT *
FROM myTable
END
ELSE
BEGIN
SELECT *
FROM myTable
WHERE COL1 = @Param1
END;
END;
答案 1 :(得分:0)
请尝试以下操作,如果有帮助,请告知我们
SELECT *
FROM myTable
WHERE COl1 = nvl(@Param1,col1) ;
通过使用nvl,其中的值不会先被解析并获得可能有助于提高性能的执行计划。