[编辑:根据Leigh的建议编辑
我一直有使用
的问题 column like <cfqueryparam cfsqltype="cf_sql_varchar" value="abc%" />
慢于大约30ms。
column like 'abc%'
在缓存计划之前,两个查询大约在同一时间运行~60ms。对于没有cfqueryparam的查询,后续命中导致1ms,对于使用cfqueryparam的查询,导致30ms。 DSN正在发送unicode,列类型为nvarchar。我没有注意到这个带有“=”的行为,只是LIKE运算符。此特定列未编入索引。
有谁知道为什么会出现这种情况?
答案 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
任何可能的参数值之间没有任何共同之处。实际上,在计划得到缓存之后,您会看到性能差异,这是因为它不仅是缓存的计划。
我还看到了一种情况,即查询优化器从未对参数化查询使用有效索引 - 对于使用它的非参数化 - 并且必须使用索引查询提示。