SQL Query Where子句减慢查询速度

时间:2016-03-15 17:44:26

标签: sql

我用来写这样的查询:

  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

2 个答案:

答案 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,其中的值不会先被解析并获得可能有助于提高性能的执行计划。