我想知道在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)
)
我想使用和/或声明,因为它不会产生太多代码,在我看来,更容易阅读,但这会影响性能
答案 0 :(得分:1)
简短回答是it depends
。但是表格越大,搜索条件越分散,使用OR
组合两种不同搜索行为的性能降级就越大。
http://www.sommarskog.se/dyn-search.html
这基本上表明One Query
= One Execution Plan
,这反过来意味着在所有情况下都能正确使用适当的索引 。
虽然这篇文章是特定于MS-SQL-Server的,但它实际上是我曾经使用过的所有RDBMS的通用原则。
对于事实表或任何大型表格,请使用IF
或Dynamic SQL
。对于任何小事或小事,请使用简洁的可维护代码。