考虑以下:
<cfquery name="aQuery" datasource="#aSource#">
SELECT aColumn
FROM aTable
WHERE bColumn = <cfqueryparam value="#aVariable#" cfsqltype="#aSqlType#" />
AND cColumn = 'someConstant'
AND dColumn is null
</cfquery>
如果我改变
AND cColumn = 'someConstant'
到
AND cColumn = <cfqueryparam value="someConstant" cfsqltype="#aSqlType#" />
是否有潜在的性能改进?是否有可能损害性能?
如果我对
AND dColumn is null
做同样的事情(使用 cfqueryparam)怎么办? ?我的发现没有定论。
如果它很重要,假设 ColdFusion9 和 Oracle db 11g。
编辑:
我想重申一下,我询问的是 cfqueryparam 标记专门用于常量和/或空值以及性能改进(如果有)。
最佳答案
Is there a potential performance improvement?
不会。绑定(bind)变量在涉及可变参数时最有用。没有它们,每次查询参数更改时,数据库都会生成一个新的执行计划(这很昂贵)。绑定(bind)变量鼓励数据库缓存和重用单个执行计划,即使参数发生变化。这节省了编译成本,提高了性能。常量确实没有任何好处。由于该值永远不会改变,因此数据库将始终重用执行计划。所以没有太多理由在常量上使用它。
Is there potential to hurt performance?
我见过一些特殊情况的提及,其中在常量上使用绑定(bind)变量实际上可能会降低性能。但这实际上是根据具体情况而定的。
关于coldfusion - <cfqueryparam> 如何影响常量和空值的性能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17574276/