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