sql-server – 使用cfqueryparams和MSSQL Server时CFQUERY超时?

我正在执行一个返回大约16000行的查询.在MS SQL Server Manager中运行直接SQL会在几秒钟内返回记录.在cfquery中运行相同的SQL几乎在同一时间返回它.查询由一些来自函数参数的变量组成.让cfquery评估变量也会快速返回查询.

为什么当我为变量添加cfqueryparam时,它们只有6个,查询运行超过一个小时然后超时. cfsqltype是* cf_sql_integer *和* cf_sql_timestamp *.一旦我删除它们,它就完成了并且正在工作.

最佳答案 通常cfqueryparam应该做得更好 – 而不是更糟 – 使用cfqueryparam因为它应该导致更好的缓存命中.但是,如果它没有达到缓存,它将创建一个新计划 – 结果将是稍微慢一点的查询 – 而不是超时.所以我猜你实际上是从缓存中得到一个执行计划而且它没有像宣传的那样工作.

作为测试尝试将cf_sql_timestamp的“TYPE”更改为cf_sql_char – 这将强制隐式转换和不同的计划,但保持cfqueryparam混合.如果它工作正常,你得到一个合理的结果,那么你需要清除你的查询缓存(我在db服务器上)或重新编译你的计划(重新编译)等.

点赞