[编辑:根据利的建议编辑
我一直有一个问题,那就是在哪里使用
column like <cfqueryparam cfsqltype="cf_sql_varchar" value="abc%" />比大约30毫秒慢。
column like 'abc%'在缓存计划之前,两个查询的运行时间大约为60ms。对于没有cfqueryparam的查询,后续的命中结果是1ms,对于使用cfqueryparam的查询,命中结果是30ms。DSN正在发送unicode,列类型为nvarchar。我没有注意到带有"=“的这种行为,只是LIKE运算符。此特定列未编制索引。
有人知道为什么会发生这种行为吗?
发布于 2012-08-22 16:41:00
当使用非参数化参数进行查询时,我已经看到sql server有类似的行为。据我所知,查询
select x from y where x.a like 'dog'只要表y数据不被修改,就永远不会更改计划、统计数据或输出。SQL Server可以检测到这一点,并将计划/统计信息/输出存储更长的时间段,而不是以下查询:
select x from y where x.a like @p1其中任何可能的参数值之间没有任何共同之处。实际上,您会说在缓存计划get之后,您会看到性能差异,这是因为缓存的不仅仅是计划。
我还看到过这样的情况:查询优化器从来没有为它使用的非参数化查询-where使用有效的索引,而必须使用索引查询提示。
https://stackoverflow.com/questions/11906542
复制相似问题