일반적으로 FROM 절의 테이블 정렬 또는 순서는 쿼리 성능을 향상시키는 데 어떤 차이가 있습니까? 배열에 의해 나는 가장 작은 테이블과 가장 큰 테이블을 의미한다.FROM 절의 테이블 정렬/순서가 성능 향상에 어떤 차이가 있습니까?
다른 경험/아이디어/의견/요인들도 높이 평가됩니다.
필자는 PostgreSQL v8.2.3을 사용하고 있습니다.
일반적으로 FROM 절의 테이블 정렬 또는 순서는 쿼리 성능을 향상시키는 데 어떤 차이가 있습니까? 배열에 의해 나는 가장 작은 테이블과 가장 큰 테이블을 의미한다.FROM 절의 테이블 정렬/순서가 성능 향상에 어떤 차이가 있습니까?
다른 경험/아이디어/의견/요인들도 높이 평가됩니다.
필자는 PostgreSQL v8.2.3을 사용하고 있습니다.
, 그것은 어떤 계획이 가능으로는 많은 다른 순서에 조인하고 생성 옵티마이을 차이 -하지해야합니다 (에서 절에 테이블을 geqo_threshold까지).
외부 조인은 대칭이 아니므로 명령문의 순서는 중요합니다 (실제 실행 순서는 여전히 서버에 의해 결정되지만).
동의합니다. PostgreSQL planner는 통계를 기반으로 테이블의 올바른 "순서"를 선택하기에 충분히 똑똑합니다. 외부 조인의 경우에는 차이가 있습니다 (그러나 결과에도 차이가 있습니다). –
쿼리 계획에서'geqo (Genetic Query Optimizer) '의 존재에 대해 알려 줘서 고마워요. – Gnanam
"SELECT FROM table1, table2"와 같은 것을 사용하고 있습니까? 테이블이 "암시 적으로"교차 결합되어 있으므로 중요하지 않다고 생각합니다.
내가 할 첫 번째 일은 EXPLAIN을 사용하여 두 가지 가능한 쿼리를 테스트하고 차이가 있는지 확인하는 것입니다.
(오히려 Postgre보다는 특정 일반 SQL 조언)
그것은 는 차이가해서는 안 - 최적화가 그것을 사용할 수있는 정보를 기반으로 계획을 구축해야한다, 그리고 SQL은 일반적으로있다 옵티 마이저가 조인, 조건 점검 등을 자유롭게 재정렬 할 수 있도록 설계되어 결과가 동일하다는 조건하에 제공됩니다.
특정 쿼리가 특정 최적화 프로그램 (특정 DB, 서버 상태, 제품 버전 등)에 문제를 일으킬 수 있지만 이런 상황이 발생하는 경우는 드뭅니다.
내부 조인 들어FROM foo, bar, baz
으로 작성하면 큰 차이가 없습니다. FROM foo JOIN bar ... JOIN baz ...
(내부 조인)이라고 쓰면, join_collapse_limit
개 미만의 요소가 있으면 차이가 나지 않습니다. 그렇지 않으면 조인 순서가 고정되어 수동으로 이러한 항목을 최적화하는 데 사용할 수 있습니다 (하지만 거의 필요하지는 않음). 외부 조인의 경우 조인 순서는 결과에 영향을주기 때문에 작성된대로 고정됩니다.
Offtopic : 버전 8.2.3은 거의 4 세이며 16 릴리스가됩니다. 유지 보수를해야합니다. 8.2.19로 업데이트하는 것은 큰 일이 아닙니다. 그냥 해보십시오. –