2009-02-07 5 views
2

더 빠르게 실행되는 쿼리는 무엇입니까?SQL "ON"절 최적화

SELECT * FROM topic_info 
    LEFT JOIN topic_data ON topic_info.id = topic_data.id 
WHERE id = ? 

또는

SELECT * FROM topic_info 
    LEFT JOIN topic_data ON topic_data.id = topic_info.id 
WHERE id = ? 

의 차이는 "ON"절에 식의 순서입니다 : topic_info에 대한 첫 번째 쿼리가 topic_data.id에 대해 topic_info.id 확인되고, 두 번째 topic_data.id. 일반적으로 더 빠르게 실행되는 쿼리는 무엇입니까?

나는 그것이 차이를 만들한다고 생각하지 않습니다

+0

들여 쓰기 내가 "멋"과 "현대 데시벨은"아무것도 할 수 있다고 생각하지 않는다 가독성 – jandersson

답변

4

을 (나도 쿼리 때문에 모호한 "ID"칼럼의 분석 만의 그 무시 못하게 알고있다). 컨벤션을 선택하고 그 컨셉을 고수하십시오.

2

현대 dbs는 실행 성능에 차이가 없도록 충분히 똑똑합니다.

+0

의 코드. "a = b"와 "b = a"는 수학적으로나 논리적으로는 동일합니다. – Tomalak

+0

오 예 ... 그렇습니다. a = 1M 레코드 및 b = 3M 레코드 인 경우 조인을 평가하는 방법이 중요합니다. 이전에 조인 시퀀스는 쿼리에서 중요했습니다 (실행 계획을 변경하면 조인을 볼 수 있음). 이제는 그렇지 않습니다. – Learning

3

아마도은 중요하지 않지만 테스트 해보십시오.

MySQL을 사용하는 경우 '설명 선택 ...'을 해보십시오. 필요한 정보를 알려줍니다.

2

약간 다른 결과를 반환하지 않습니까?

왼쪽 결합이므로 다른 테이블에 연결된 레코드가없는 두 테이블의 행이 있으면 그 테이블이 조인 절의 오른쪽에있을 때 테이블이 검색되지 않습니다.

내가 오해 한 적이 있습니까?

편집 : 완전히 오해했습니다. 몇 가지 테스트를 완료했습니다. 내가 나를 똑바로 놔 뒀다 고 생각하는 사람에게 따.

+0

조인 순서가 변경되지 않습니다. 'FROM topic_info LEFT JOIN topic_data' 및'FROM topic_data LEFT JOIN topic_info' *는 다른 결과를 반환합니다. –

+0

맞아, OP는 ON 절의 용어 순서 만 변경하고 있습니다. 평등은 교환 적이므로 결과는 동일합니다. 유일한 차이점은 SQL 엔진이 인덱스를 선택하는 방식 일 수 있습니다. –

+0

내가 언급 한 것처럼 ... – Wayne

3

다른 포스터는 정확합니다. 어떤 방식 으로든 조인을 표현하는 것은 중요하지 않습니다.

이것은 쿼리 최적화 프로그램이 쿼리에 가장 효율적인 방법과 물론 쿼리 계획을 결정하기 때문입니다. 이것은 조인 문 순서와 관계없이 발생합니다.

희망 사항에 따라 문제가 해결되지만 추가 세부 정보를 요청하시기 바랍니다.

건배, 존