如果使用声明参数,类似 sql 的查询会很慢,但如果不使用声明参数,查询会很快

发布于 2024-11-07 07:03:48 字数 254 浏览 0 评论 0原文

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

尾戒 2024-11-14 07:03:48

我想您必须有一个带有前导列的非覆盖索引 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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文