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

时间:2012-08-10 17:31:20

标签: sql-server coldfusion coldfusion-8

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

我一直有使用

的问题
 column like <cfqueryparam cfsqltype="cf_sql_varchar" value="abc%" />

慢于大约30ms。

column like 'abc%'

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

有谁知道为什么会出现这种情况?

1 个答案:

答案 0 :(得分:0)

我在使用非参数化参数查询时看到了与sql server类似的行为。据我所知查询

select x from y where x.a like 'dog'
只要表y数据未被修改,

永远不会更改计划,统计信息或输出。 SQL Server可以并确实检测到这一点并将计划/统计信息/输出存储的时间与此查询相比较长:

select x from y where x.a like @p1

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

我还看到了一种情况,即查询优化器从未对参数化查询使用有效索引 - 对于使用它的非参数化 - 并且必须使用索引查询提示。