MySQL - Where子句处理顺序

时间:2014-06-14 08:23:02

标签: mysql query-optimization coldfusion-9

这是一个基本问题。我继承了一些包含cfquery的代码。它运行在带有MySQL 5.6的CF9上。 cfquery读取:

SELECT some_columns 
FROM   tablename 
WHERE  itemname = 'itemnamevar' 
AND    id > 0 
ORDER BY orderby

该表包含20000多个项目。 ID是主键自动增量值。 它在我看来像以前的编码器用于将id > 0放入查询中以在查询之前添加一些其他子句条件。如果没有使用它们(由某些if / else控制),id > 0应该导致选择表中的所有数据。

因此代码用作:

SELECT some_columns
FROM   tablename
WHERE 
<cfif id>
   id = '###'
<cfelse>
   <cfif LEN(itemname)>
      itemname = 'itemnamevar' AND 
   </cfif>
   <cfif LEN(itemgroup)>
      itemgroup = 'itemgroupvar' AND 
   </cfif>
   id > 0
</cfif>

我的问题是:如果所有其他子句最小化查询集,在处理id > 0之前,我可以假设id > 0对性能没有影响,或者我应该重写要删除的代码那个条件?这需要一些时间,因为有很多查询需要优化。

我需要说运行此代码的网站负载很重(每月超过20万的访问者增长相对较快)。

提前致谢。如果您需要更多信息,请与我们联系。

1 个答案:

答案 0 :(得分:1)

使用计算结果为TRUE的表达式而不检查数据。例如:

1 = 1