我有一个查询,其中有一个使用多个局部变量构建的 where 子句,但这非常慢。以下是一个粗略的示例,因为我当前无权访问该查询:
declare @a varchar(50), @b varchar(50), @c varchar(50)
set @a = '%'
set @b = 'foo'
set @c = '%bar'
我的 where 子句是这样的
where a = @a and b = @b and c =@c
运行大约需要 1 分钟。但是,如果我直接引用 where 子句中的值,例如:
where a = '%' and b = 'foo' and '%bar'
大约需要 5 秒。
所以我的问题是,有没有更好的方法来构造我的 where 子句?需要注意的一件重要事情。 where 子句中使用了大约 10 个局部变量,但大多数都设置为默认值 %
提前致谢
Using 局部变量at WHERE 过滤器导致全表扫描。因为SS在编译时并不知道局部变量的值。因此,它会创建该列可用的最大规模的执行计划。
为了防止性能问题,SS必须在编译时知道变量的值。定义 SP,以及将这些局部变量作为参数传递是问题的解决方案之一。另一个解决方案是,使用sp_executesql并再次将这些局部变量作为参数传递......
或者您可以添加选项(重新编译)在你的 sql 语句的末尾,使你的局部变量被编译。这将解决性能问题。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)