条件凡Vs动态查询

时间:2016-02-25 06:30:35

标签: 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使它非常慢)。解决方法是重新编译

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

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

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

  1. 有条件的地方重新编译
  2. 使用sql_execute
  3. 执行动态查询

    将为每次执行再次生成查询计划,因此,为了便于维护或任何其他因素,应优先考虑这些方法中的哪一种。或者他们两个在不同的情况下提供他们的用途,我完全误解了他们?

0 个答案:

没有答案