<cfqueryparam>如何影响常量和空值的性能?

Tri*_*rly 4 coldfusion null cfqueryparam oracle11g coldfusion-9

考虑以下:

<cfquery name="aQuery" datasource="#aSource#">
    SELECT aColumn
      FROM aTable
     WHERE bColumn = <cfqueryparam value="#aVariable#" cfsqltype="#aSqlType#" />
       AND cColumn = 'someConstant'
       AND dColumn is null
</cfquery>
Run Code Online (Sandbox Code Playgroud)

如果我改变

AND cColumn = 'someConstant'
Run Code Online (Sandbox Code Playgroud)

AND cColumn = <cfqueryparam value="someConstant" cfsqltype="#aSqlType#" />
Run Code Online (Sandbox Code Playgroud)

是否有潜在的性能提升?是否有可能伤害表现?

如果我这样做(使用cfqueryparam)AND dColumn is null怎么办?

我的发现尚无定论.

如果这很重要,请假设ColdFusion9和Oracle db 11g.

编辑:

我只想重申一下,我问的是cfqueryparam标签是专门用于常量和/或空值以及性能再现(如果有的话).

Lei*_*igh 6

是否有潜在的性能提升?

不可以.当涉及不同的参数时,绑定变量最有用.没有它们,每次查询参数改变时,数据库都会生成一个新的执行计划(这很昂贵).绑定变量鼓励数据库缓存并重用单个执行计划,即使参数更改也是如此.这节省了编译成本,提高了性能.常数确实没有任何好处.由于值永远不会更改,因此数据库将始终重用执行计划.因此没有太多理由在常量上使用它.

是否有可能伤害表现?

我已经看到一些特殊情况的提及,在常量上使用绑定变量实际上可能会降低性能.但这确实是在个案的基础上.

  • 最糟糕的情况是使用混合的cfqueryparam和在SQL中使用非参数化变量的查询 - 尤其是当非参数化变量存在大量变化时.在SQL cfqueryparams(首选)中创建所有变量,或者在没有cfqueryparam的情况下创建所有变量.Leigh回答,常数/空无关紧要.使用混合可能会损害高容量网站的性能.小批量应用程序不会注意到它. (2认同)