如果使用声明参数,类似 sql 的查询会很慢,但如果不使用声明参数,查询会很快
SQL 2008: 这很慢(需要 1 1/2 分钟):
declare @p1 varchar(50) set @p1 = '976j%' select * from invsearch_query where comparepnfwd like @p1
这需要不到一秒:
select * from invsearch_query where comparepnfwd like '976j%'
为什么???
SQL 2008:
This is slow (takes 1 1/2 minutes):
declare @p1 varchar(50) set @p1 = '976j%' select * from invsearch_query where comparepnfwd like @p1
This takes less than a second:
select * from invsearch_query where comparepnfwd like '976j%'
Why???
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我想您必须有一个带有前导列的非覆盖索引
comparepnfwd
,该索引由文字查询使用,但不由带有变量的查询使用。您可以使用
OPTION (RECOMPILE)
让 SQL Server 重新编译计划,同时考虑实际变量值。I would imagine that you must have a non covering index with leading column
comparepnfwd
that is used by the literal query but not by the query with the variable.You can use
OPTION (RECOMPILE)
to get SQL Server to recompile the plan taking into account the actual variable value.