Performance 条件Where Vs动态查询

Performance 条件Where Vs动态查询,performance,sql-server-2008,dynamicquery,Performance,Sql Server 2008,Dynamicquery,我们大多数人都在查询中使用了条件where子句来获得多个参数的所需输出 WHERE (@Variable1 IS NULL OR Column1 = @Variable1) AND (@Variable2 IS NULL OR Column2 = @Variable2) AND (@Variable3 IS NULL OR Column3 = @Variable3) ... and so on 这是一种可怕的方式,因为列/参数的数量很大(从我观察到的情况来看,超过3或4个列/参数使其速

我们大多数人都在查询中使用了条件where子句来获得多个参数的所需输出

WHERE (@Variable1 IS NULL OR Column1 = @Variable1)
  AND (@Variable2 IS NULL OR Column2 = @Variable2)
  AND (@Variable3 IS NULL OR Column3 = @Variable3)
... and so on
这是一种可怕的方式,因为列/参数的数量很大(从我观察到的情况来看,超过3或4个列/参数使其速度非常慢)。解决方法是重新编译

另一种方法是使用动态查询

Set @query = 'Select column1, column2, column3 from table where '

Set @where = @Where + Case when @variable1 IS NOT NULL THEN 'AND Column1 = @Variable1' Else '' END

Set @where = @Where + Case when @variable2 IS NOT NULL THEN 'AND Column2 = @Variable2' Else '' END

... and so on
我懒得输入动态查询的全部代码:p

我的问题是:在这两种情况下

  • 有条件的重新编译
  • 使用
    sql\u execute执行动态查询

  • 每次执行时都会再次生成查询计划,因此为了便于维护或考虑其他因素,应该首选哪种方法。或者它们是否都在不同的情况下使用,而我完全误解了它们

    你看到了吗?谢谢你现在阅读的链接:)