具有5个参数的最佳SELECT语法性能

时间:2014-11-18 00:52:56

标签: sql-server

我尝试使用存储过程选择一个包含一百万条记录的表。 存储过程有一个5参数。 哪个具有最佳性能

查询1:

SELECT * FROM Table1
WHERE Column1 like '%'+ @param1 +'%' AND
Column2 like '%'+ @param2 +'%' AND
Column3 like '%'+ @param3 +'%' AND
Column4 like '%'+ @param4 +'%' AND
Column5 like '%'+ @param5 +'%' AND

注意:我使用的是因为LIKE与空('')参数的结果与不使用参数相同。

SELECT * FROM Table1
WHERE Column1 like '%'+ @param1 +'%' 

具有相同的结果
SELECT * FROM Table1

是@ param1的值为空('')

查询2:

IF @param1 = '' SELECT @param1 = null
IF @param2 = '' SELECT @param2 = null
IF @param3 = '' SELECT @param3 = null
IF @param4 = '' SELECT @param4 = null
IF @param5 = '' SELECT @param5 = null

IF @param1 is not null and @param2 is null and @param3 is null @param4 is null and @param5 is null
BEGIN
  SELECT * FROM Table1
  WHERE Column1 like '%'+ @param1 +'%'
END

并继续,直到涵盖所有可能性。

哪种性能最佳? 最好的意思是,有一个有效的I / O和游行时间 提前谢谢


更新

我尝试过RADAR解决方案,并将其与使用实际执行计划的第一个查询进行了比较 所以它的结果是:

查询1(我)的结果

enter image description here

查询2(RADAR)的结果

enter image description here

我不知道如何阅读,请帮助我

再次感谢

1 个答案:

答案 0 :(得分:1)

第二种方法更好,您可以使用或基于参数值

来简化它
 SELECT * FROM Table1
 WHERE (@param1 ='' or Column1 like '%'+ @param1 +'%' )
 AND 
 (@param2 ='' or Column2 like '%'+ @param2 +'%' )
 AND...