이것은 기본적인 질문입니다. 나는 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 = 1"이고 다른 조건이없는 경우 "위치"가 처리되지 않습니다. –
그게 뭐야, 1 = 1은 어디에도 전혀 같지 않다. –
어쨌든, id> 0은 성능에 영향을주지 않아야한다. 몇 가지 테스트를 실행할 수있다. –