2014-06-14 3 views
0

이것은 기본적인 질문입니다. 나는 cfquery를 포함하는 코드를 상속 받았다. 그것은 MySQL 5.6과 CF9에서 실행됩니다. cfquery는 다음과 같습니다.MySQL - Where 절 처리 순서

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 성능에 영향을주지 않습니다 가정 할 수 있습니다 또는 그 조건을 제거하기 위해 코드를 다시 작성해야합니까? 최적화 할 쿼리가 많기 때문에 시간이 걸릴 것입니다.

이 코드를 실행하는 웹 사이트에는 부하가 비교적 큽니다 (한 달에 200 만 명 이상의 방문객이 비교적 빠르게 증가하고 있음).

미리 감사드립니다. 추가 정보가 필요하면 알려주십시오.

답변

1

데이터를 확인하지 않고 TRUE로 평가되는 식을 사용하십시오. 예 :

1 = 1 
+0

감사합니다. 즉, 유일한 조건이 "1 = 1"이고 다른 조건이없는 경우 "위치"가 처리되지 않습니다. –

+1

그게 뭐야, 1 = 1은 어디에도 전혀 같지 않다. –

+1

어쨌든, id> 0은 성능에 영향을주지 않아야한다. 몇 가지 테스트를 실행할 수있다. –