使用cfqueryparam传多值引发索引扫描及504超时问题求助
ColdFusion cfqueryparam 引发索引扫描及部分环境超时问题
- 使用
cfqueryparam传递逗号分隔列表值时,SQL执行index scan而非index seek,经确认是nvarchar(4000)类型导致的问题。 - 5个环境的CF版本和数据库版本完全一致,但其中2个环境触发504超时错误,且仅在WHERE子句使用
tracknumber条件时出现。 - 直接在SQL中写入具体值时查询运行正常,已初步排除代码问题,询问ColdFusion Administrator中是否存在与
cfqueryparam相关的遗漏配置导致该问题。
相关代码
SELECT * FROM PSOPackage PP with(nolock) JOIN PSO PINV with(nolock) ON PINV.PSOID = PP.PSOID JOIN File F with(nolock) ON F.FileID = PINV.FileID JOIN Company CY with(nolock) ON F.companyID = CY.companyID left JOIN Package E ON PP.PackageID = E.PackageID WHERE <cfif form.PSOID neq 'None' and form.PSOID neq ''> PP.PSOID in ( <cfqueryparam value="#form.PSOID#" cfsqltype="cf_sql_varchar" list="true" separator=","> ) <cfelse> tracknumber in ( <cfqueryparam value="#form.tracknumber#" cfsqltype="cf_sql_varchar" list="true" separator=","> ) </cfif> ORDER BY pp.tracknumber, CY.abbr, f.file_Dt DESC
测试正常的代码(直接传值)
<cfelse> tracknumber in ('1V0Y780E0352033914','1M0Y780E0331023829','1S0Y780E0326482481','1P0Y780E0320555454','1X0Y770B0329555454') </cfif>
内容的提问来源于stack exchange,提问作者sangeeta bhat
相关产品推荐
相关产品推荐

