首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用带有通配符的LIKE的Cfqueryparam比不使用cfqueryparam要慢

使用带有通配符的LIKE的Cfqueryparam比不使用cfqueryparam要慢
EN

Stack Overflow用户
提问于 2012-08-11 01:31:20
回答 1查看 1.3K关注 0票数 4

[编辑:根据利的建议编辑

我一直有一个问题,那就是在哪里使用

代码语言:javascript
复制
 column like <cfqueryparam cfsqltype="cf_sql_varchar" value="abc%" />

比大约30毫秒慢。

代码语言:javascript
复制
column like 'abc%'

在缓存计划之前,两个查询的运行时间大约为60ms。对于没有cfqueryparam的查询,后续的命中结果是1ms,对于使用cfqueryparam的查询,命中结果是30ms。DSN正在发送unicode,列类型为nvarchar。我没有注意到带有"=“的这种行为,只是LIKE运算符。此特定列未编制索引。

有人知道为什么会发生这种行为吗?

EN

回答 1

Stack Overflow用户

发布于 2012-08-22 16:41:00

当使用非参数化参数进行查询时,我已经看到sql server有类似的行为。据我所知,查询

代码语言:javascript
复制
select x from y where x.a like 'dog'

只要表y数据不被修改,就永远不会更改计划、统计数据或输出。SQL Server可以检测到这一点,并将计划/统计信息/输出存储更长的时间段,而不是以下查询:

代码语言:javascript
复制
select x from y where x.a like @p1

其中任何可能的参数值之间没有任何共同之处。实际上,您会说在缓存计划get之后,您会看到性能差异,这是因为缓存的不仅仅是计划。

我还看到过这样的情况:查询优化器从来没有为它使用的非参数化查询-where使用有效的索引,而必须使用索引查询提示。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11906542

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档