Catch-all-search,动态SQL?

时间:2013-08-16 18:48:12

标签: tsql sql-server-2005

昨天我问了一个关于我们试图在我们的应用程序中重写/优化的程序的问题。它来自一个搜索表单,其中包含一组用户可以指定的标准。 40个参数,其中3个是Guids的长字符串,我将其传递给返回Table变量的UDF,其中所有3个JOIN都放入我们的主FROM语句中。

我们使用动态SQL做了很多这样的查询,我们重写整个事情的主要原因之一是因为它是动态SQL。我读过的关于动态SQL的一切都很糟糕,特别是对于执行计划和优化。然后我开始看到像这两个文章....

Sometimes the Simplest Solution isn't the Best Solution

Erland Sommarskog - Dynamic SQL Conditions in T-SQL

我一直认为动态SQL不利于安全性和优化,我们尝试尽可能从系统中删除它。现在我们正在重构我们系统中执行最多的查询(主搜索查询),我们认为剥离所有动态SQL都会有所帮助。

基本上替换

IF(@Param1 IS NULL)
   @SQLString = @SQLString + " AND FieldX = @Param1"
...execute the @SQLString

使用一个具有

的大型SQL块
WHERE (@Param1 IS NOT NULL AND FieldX = @Param1)

阅读这两篇文章似乎对我不利。我不能使用RECOMPILE因为我们仍处于2k5,即使我们可以使用这个存储过程也是非常高的。我真的想在动态SQL中编写此查询吗?如果不能存储执行计划,怎么会更快?

0 个答案:

没有答案