2011-01-04 4 views
5

일반적으로 FROM 절의 테이블 정렬 또는 순서는 쿼리 성능을 향상시키는 데 어떤 차이가 있습니까? 배열에 의해 나는 가장 작은 테이블과 가장 큰 테이블을 의미한다.FROM 절의 테이블 정렬/순서가 성능 향상에 어떤 차이가 있습니까?

다른 경험/아이디어/의견/요인들도 높이 평가됩니다.

필자는 PostgreSQL v8.2.3을 사용하고 있습니다.

+2

Offtopic : 버전 8.2.3은 거의 4 세이며 16 릴리스가됩니다. 유지 보수를해야합니다. 8.2.19로 업데이트하는 것은 큰 일이 아닙니다. 그냥 해보십시오. –

답변

4

, 그것은 어떤 계획이 가능으로는 많은 다른 순서에 조인하고 생성 옵티마이을 차이 -하지해야합니다 (에서 절에 테이블을 geqo_threshold까지).

외부 조인은 대칭이 아니므로 명령문의 순서는 중요합니다 (실제 실행 순서는 여전히 서버에 의해 결정되지만).

+0

동의합니다. PostgreSQL planner는 통계를 기반으로 테이블의 올바른 "순서"를 선택하기에 충분히 똑똑합니다. 외부 조인의 경우에는 차이가 있습니다 (그러나 결과에도 차이가 있습니다). –

+1

쿼리 계획에서'geqo (Genetic Query Optimizer) '의 존재에 대해 알려 줘서 고마워요. – Gnanam

2

"SELECT FROM table1, table2"와 같은 것을 사용하고 있습니까? 테이블이 "암시 적으로"교차 결합되어 있으므로 중요하지 않다고 생각합니다.

내가 할 첫 번째 일은 EXPLAIN을 사용하여 두 가지 가능한 쿼리를 테스트하고 차이가 있는지 확인하는 것입니다.

0

(오히려 Postgre보다는 특정 일반 SQL 조언)

그것은 는 차이가해서는 안 - 최적화가 그것을 사용할 수있는 정보를 기반으로 계획을 구축해야한다, 그리고 SQL은 일반적으로있다 옵티 마이저가 조인, 조건 점검 등을 자유롭게 재정렬 할 수 있도록 설계되어 결과가 동일하다는 조건하에 제공됩니다.

특정 쿼리가 특정 최적화 프로그램 (특정 DB, 서버 상태, 제품 버전 등)에 문제를 일으킬 수 있지만 이런 상황이 발생하는 경우는 드뭅니다.

내부 조인 들어
0

FROM foo, bar, baz으로 작성하면 큰 차이가 없습니다. FROM foo JOIN bar ... JOIN baz ... (내부 조인)이라고 쓰면, join_collapse_limit 개 미만의 요소가 있으면 차이가 나지 않습니다. 그렇지 않으면 조인 순서가 고정되어 수동으로 이러한 항목을 최적화하는 데 사용할 수 있습니다 (하지만 거의 필요하지는 않음). 외부 조인의 경우 조인 순서는 결과에 영향을주기 때문에 작성된대로 고정됩니다.

관련 문제