Postgresql 9.0.23 문서화 | ||||
---|---|---|---|---|
토토 핫 : 문서 : 9.0 : 토토 핫 규칙 시스템 | up | 44 장. PostgreSQL 내부의 개요 | 스포츠 토토 베트맨 : 문서 : 9.0 : 집행자 |
Planner/Optimizeris 최적의 실행 계획을 작성합니다. 주어진 SQL 쿼리 (및 따라서 쿼리 트리)는 실제로 다양한 종류로 실행될 수 있습니다. 서로 다른 방식으로, 각각은 동일한 세트를 생산할 것입니다. 결과. 계산적으로 실현 가능하면 쿼리 최적화기 이러한 가능한 실행 계획 각각을 조사합니다 실행될 것으로 예상되는 실행 계획을 선택 가장 빠른.
참고 :어떤 상황에서는 가능한 각 상황을 검사합니다 쿼리를 실행할 수있는 방법은 과도하게됩니다. 시간과 메모리 공간의 양. 특히, 이것은 발생합니다 많은 수의 조인과 관련된 쿼리를 실행할 때 운영. 합리적인 것을 결정하기 위해 ( 합리적인 양으로 반드시 최적의 쿼리 계획 시간,PostgreSQLaGenetic Query Optimizer(참조PostgreSQL : 문서 : 9.0 : 유전자 와이즈 토토 옵티마이저) 조인 수가있을 때 임계 값을 초과합니다 (참조geqo_threshold).
무지개 토토의 검색 절차는 실제로 데이터와 함께 작동합니다 이라는 구조물Paths단순히 단순히 포함 된 계획의 표현을 단순히 삭감합니다 무지개 토토로서의 정보는 결정을 내려야합니다. 후 가장 저렴한 경로가 결정되고 본격적으로계획 트리는 집행자에게 전달되도록 만들어졌습니다. 이것 원하는 실행 계획을 충분히 상세하게 나타냅니다 그것을 실행하는 집행자. 이 섹션의 나머지 부분에서는 우리는 무시할 것입니다 경로와 계획의 구별.
무지개 토토/최적화기는 계획을 생성하여 시작합니다 쿼리에 사용 된 각 개별 관계 (테이블)를 스캔합니다. 가능한 계획은 사용 가능한 인덱스에 의해 결정됩니다. 각 관계. 항상 수행 할 가능성이 있습니다 관계에 대한 순차적 스캔이므로 순차적 스캔 계획은 항상 만들어졌습니다. 인덱스가 관계에 정의되어 있다고 가정하십시오 (for 예제 B- 트리 색인) 및 쿼리에는 제한이 포함되어 있습니다relation.Attribute opr 상수. 만약에relation.attribute일치합니다 B-Tree 지수의 열쇠 및oprIS 인덱스에 나열된 연산자 중 하나운영자 클래스, 또 다른 계획이 사용됩니다 관계를 스캔하는 B- 트리 색인. 추가가있는 경우 존재하는 색인 및 쿼리 제한이 발생합니다. 인덱스 키를 일치 시키면 추가 계획이 고려됩니다. 인덱스 스캔 계획은 또한 쿼리와 일치 할 수있는 정렬 순서주문 by절 (있는 경우) 또는 정렬 주문 합병 결합에 유용 할 수 있습니다 (아래 참조).
쿼리가 둘 이상의 관계에 가입 해야하는 경우 계획 관계에 가입하기위한 모든 계획 후에는 고려됩니다 단일 관계를 스캔하기 위해 발견되었습니다. 세 사용 가능한 조인 전략은 다음과 같습니다.
중첩 루프 조인: 오른쪽 왼쪽에있는 모든 행에 대해 관계가 한 번 스캔됩니다. 관계. 이 전략은 구현하기 쉽지만 가능합니다 매우 시간이 많이 걸립니다. (그러나 올바른 관계가있을 수 있다면 인덱스 스캔으로 스캔하면 좋은 전략이 될 수 있습니다. 그것 왼쪽의 현재 행에서 값을 사용할 수 있습니다. 오른쪽의 색인 스캔을위한 키로서의 관계.)
합병 조인: 각 관계는입니다 조인이 시작되기 전에 조인 속성을 정렬합니다. 그 다음에 두 관계는 병렬로 스캔되고 일치합니다 행은 결합되어 결합 행을 형성합니다. 이런 종류의 가입입니다 각 관계를 스캔해야하므로 더 매력적입니다 한 번만. 필요한 정렬은 다음에 의해 달성 될 수 있습니다 명시적인 정렬 단계 또는 관계를 스캔하여 조인 키에서 색인을 사용하는 적절한 순서.
해시 조인: 올바른 관계 먼저 스캔하고 해시 테이블에로드되어 사용합니다. 속성에 해시 키로 가입하십시오. 다음으로 좌익은입니다 스캔하고 발견 된 모든 행의 적절한 값은 일치 행을 찾기 위해 해시 키로 사용됩니다. 테이블.
쿼리에 두 가지 이상의 관계가 포함되면 최종 결과는 각각 2 개의 가입 단계로 구축해야합니다. 입력. 무지개 토토는 다른 가능한 조인 시퀀스를 검사합니다 가장 저렴한 것을 찾으려면
쿼리가 더 적은 것을 사용하는 경우geqo_threshold관계에서, 근접한 검색이 수행됩니다 최고의 조인 시퀀스. 무지개 토토는 우선적으로 결합을 고려합니다 해당하는 두 관계 사이에 의 조항에 가입여기서자격 (즉, 제한과 같은여기서 rel1.attr1 = rel2.attr2존재). 가입없이 쌍을 가입하십시오 조항은 다른 선택이 없을 때만 고려됩니다. IS, 특정 관계는 이용 가능한 조인 조항이 없습니다. 다른 관계. 가능한 모든 계획은 모든 조인에 대해 생성됩니다 플래너에 의해 고려 된 쌍과 그 쌍 (추정 된 것) 가장 저렴한 선택이 선택됩니다.
언제geqo_threshold초과 고려 된 조인 시퀀스는 휴리스틱에 의해 결정됩니다 설명PostgreSQL : 문서 : 9.0 : 유전자 와이즈 토토 옵티마이저. 그렇지 않으면 프로세스는 동일합니다.
완성 된 계획 트리는 순차적 또는 인덱스 스캔으로 구성됩니다. 기본 관계, 중첩 루프, 병합 또는 해시 조인 필요에 따른 노드와 정렬과 같은 보조 단계 노드 또는 집계 기능 계산 노드. 이들 대부분 계획 노드 유형은 추가 기능을 추가 할 수 있습니다선택(충족하지 않는 줄 폐기 지정된 부울 조건) 및투영(파생 된 열 세트의 계산 주어진 열 값, 즉 스칼라 평가에 기초하여 필요한 경우 표현). 의 책임 중 하나 플래너는에서 선택 조건을 첨부하는 것입니다.여기서필수 출력의 조항 및 계산 플랜 트리의 가장 적절한 노드에 대한 표현.