SQL if / else vs和/或select with with params

时间:2015-04-29 07:48:20

标签: sql

我想知道在if / else中使用Query划分查询或使用long where子句和/或何时使用不同参数对表进行选择时,是否存在一般性能差异?例如

if statement:

if @p1 is null and @p2 is null begin
   select * from table
end
else if @p1 is not null and @p2 is null begin
   select * from table t where t.val1 = @p1
end  
else if @p1 is null and @p2 is not null begin
   select * from table t where t.val2 = @p2
end  

和/或陈述:

    select * from t1
    where ( 
       (t1.val1 = @p1 or @p1 is null) 
       and
       (t1.val2 = @p2 or @p2 is null)
    )

我想使用和/或声明,因为它不会产生太多代码,在我看来,更容易阅读,但这会影响性能

1 个答案:

答案 0 :(得分:1)

简短回答是it depends。但是表格越大,搜索条件越分散,使用OR组合两种不同搜索行为的性能降级就越大。

http://www.sommarskog.se/dyn-search.html

这基本上表明One Query = One Execution Plan,这反过来意味着在所有情况下都能正确使用适当的索引

虽然这篇文章是特定于MS-SQL-Server的,但它实际上是我曾经使用过的所有RDBMS的通用原则。


对于事实表或任何大型表格,请使用IFDynamic SQL。对于任何小事或小事,请使用简洁的可维护代码。