我尝试使用存储过程选择一个包含一百万条记录的表。 存储过程有一个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(我)的结果
查询2(RADAR)的结果
我不知道如何阅读,请帮助我
再次感谢
答案 0 :(得分:1)
第二种方法更好,您可以使用或基于参数值
来简化它 SELECT * FROM Table1
WHERE (@param1 ='' or Column1 like '%'+ @param1 +'%' )
AND
(@param2 ='' or Column2 like '%'+ @param2 +'%' )
AND...