2009-10-07 3 views
2

여러 WHERE 절을 기반으로 테이블을 쿼리한다고 가정합니다.MySQL 쿼리에서 부울 문 순서에 따라 성능 차이가 있습니까?

이러한 진술 중 하나가 다른 것보다 빠를 수 있습니까?

SELECT * 
    FROM table 
    WHERE (line_type='section_intro' OR line_type='question') 
    AND (line_order BETWEEN 0 AND 12) 
ORDER BY line_order"; 

... 또는 :

SELECT * 
    FROM table 
    WHERE (line_order BETWEEN 0 AND 12) 
    AND (line_type='section_intro' OR line_type='question') 
ORDER BY line_order; 

나는 첫 번째는 12 개 이상의 레코드를 선택하고 거기에서 아래로 껍질을 벗기다 것입니다 여부에 그것을 내려 올 것입니다 무슨 같아요.

답변

2

아니요, 순서는 중요하지 않습니다. 쿼리 최적화 프로그램은 모든 조건을 따로 따로 예측하여 적용 할 수있는 인덱스/대상 선택 크기 등을 기준으로 최상의 순서를 결정합니다.

+0

우수, 그게 내가 가지 생각하지만 나중에 참조 알고 좋은 것 생각거야. 감사합니다. – javanix

0

인덱스에 따라 다릅니다. (line_type, line_order)에 다중 색인이있는 경우 첫 번째 쿼리가 더 빠릅니다. 인덱스가 (line_order, line_type)이면 두 번째 인덱스가 빠릅니다. 이것은 다중 컬럼 기본 키의 경우 MySQL은 순서대로 비교 만 수행 할 수 있기 때문입니다. 그렇지 않으면 차이가 없습니다.

HTH -

크리스

+0

올바르지 않습니다. 두 쿼리 모두 두 인덱스에서 정확히 같을 것입니다. ** 인덱스 ** 중 하나는 테이블/인덱스에 일치하는 행 수에 따라 쿼리를 빠르게 수행합니다. 예를 들어, 테이블의 모든 행 (또는 대다수)이'line_type'을'section_intro' 또는'question'으로 설정하면 (line_type, line_order)에 정의 된 인덱스는 전혀 사용되지 않습니다. – ChssPly76

관련 문제