【发布时间】:2012-10-18 22:41:50
【问题描述】:
针对这种情况最优化的解决方案是什么:
我的查询的 WHERE 子句是这样的:
WHERE columnX LIKE @Account + '%'
我使用 '%' 因为 @Account 可能是 ' ',在这种情况下我想获取所有值。在所有其他情况下,我可以使用等于 (=)。
此解决方案未优化,因为我在 columnX 上有索引,因此我想使用等于 (=)。此外,由于性能原因,使用 OR 的解决方案是不可接受的。
您还有其他建议吗?我尝试在 WHERE 子句中使用 CASE,但没有找到优化的好解决方案。我们的兼容级别是 80,所以不能使用更新的语法。 (不要问为什么:-))
TnX 提前!
内曼加
【问题讨论】:
-
为什么不能通过 if (@Account ='') 语句将其分成两个部分(查询)?所以如果 @Account='' 你根本不需要 WHERE 子句。
-
那是一种解决方案,但看起来代码冗余和性能不太好。另外,由于这段代码在程序中,我需要添加 WITH RECOMPILE,因为在两种不同的情况下执行计划不同。
-
在构建查询的代码中,测试 Account 是否为空或 null,然后重定向以运行查询,该查询显示获取所有行。否则,使用 where columnX = Account。
-
@Eric 你的意思是使用 IF 子句还是其他方式?
-
您必须发布您的整个函数或过程,以获取有关键入内容的分步说明。
标签: sql sql-server tsql optimization where