이 문서는 지원되지 않는 PostgreSQL 버전에 대한 것입니다.
다음에 대한 동일한 페이지를 보고 싶을 수도 있습니다.토토 : 문서 : 17 : 50.5. 플래너/최적화버전 또는 위에 나열된 다른 지원 버전 중 하나를 사용하세요.

51.5. 플래너/옵티마이저#

의 임무플래너/옵티마이저최적의 실행 계획을 세우는 것입니다. 특정 SQL 쿼리(및 쿼리 트리)는 실제로 다양한 방식으로 실행될 수 있으며 각 방식은 동일한 결과 집합을 생성합니다. 계산이 가능한 경우 쿼리 최적화 프로그램은 이러한 가능한 실행 계획을 각각 검사하여 궁극적으로 가장 빠르게 실행될 것으로 예상되는 실행 계획을 선택합니다.

참고

어떤 상황에서는 쿼리가 실행될 수 있는 가능한 각 방법을 검토하는 데 과도한 시간과 메모리가 소요됩니다. 특히 이는 다수의 조인 작업이 포함된 쿼리를 실행할 때 발생합니다. 합리적인 시간 내에 합리적인(최적일 필요는 없음) 쿼리 계획을 결정하기 위해,PostgreSQL사용유전자 쿼리 최적화 도구(참조토토 커뮤니티 : 문서 : 개발 : 61 장. 유전자 쿼리 최적화) 조인 수가 임계값을 초과하는 경우(참조geqo_threshold).

플래너의 검색 절차는 실제로 다음과 같은 데이터 구조와 함께 작동합니다.경로은 기획자가 결정을 내리는 데 필요한 정보만큼만 포함된 계획을 간략하게 표현한 것입니다. 가장 저렴한 경로가 결정된 후 본격적인계획 트리실행자에게 전달되도록 구축되었습니다. 이는 실행자가 실행할 수 있을 만큼 충분히 자세하게 원하는 실행 계획을 나타냅니다. 이 섹션의 나머지 부분에서는 경로와 계획 간의 구별을 무시하겠습니다.

51.5.1. 가능한 계획 생성#

플래너/최적화 프로그램은 쿼리에 사용된 각 개별 관계(테이블)를 검색하기 위한 계획을 생성하는 것으로 시작합니다. 가능한 계획은 각 관계에서 사용 가능한 인덱스에 따라 결정됩니다. 관계에 대해 순차 스캔을 수행할 가능성이 항상 있으므로 순차 스캔 계획이 항상 생성됩니다. 인덱스가 관계(예: B-트리 인덱스)에 정의되어 있고 쿼리에 제한 사항이 포함되어 있다고 가정합니다.relation.attribute OPR 상수. 만일토토 캔.속성B-트리 인덱스의 키와 일치하는 일이 발생하며OPR색인에 나열된 연산자 중 하나입니다.연산자 클래스, B-트리 인덱스를 사용하여 관계를 스캔하는 또 다른 계획이 생성됩니다. 추가 인덱스가 있고 쿼리의 제한 사항이 인덱스 키와 일치하는 경우 추가 계획이 고려됩니다. 쿼리와 일치할 수 있는 정렬 순서가 있는 인덱스에 대해서도 인덱스 스캔 계획이 생성됩니다.주문 기준절(있는 경우) 또는 병합 조인에 유용할 수 있는 정렬 순서(아래 참조).

쿼리가 둘 이상의 관계를 결합해야 하는 경우 단일 관계를 스캔하기 위한 모든 실행 가능한 계획을 찾은 후 관계 결합 계획이 고려됩니다. 사용 가능한 세 가지 조인 전략은 다음과 같습니다.

  • 중첩 루프 조인: 왼쪽 관계에서 발견된 모든 행에 대해 오른쪽 관계를 한 번 검색합니다. 이 전략은 구현하기 쉽지만 시간이 많이 걸릴 수 있습니다. (그러나 인덱스 스캔으로 오른쪽 릴레이션을 스캔할 수 있다면 이는 좋은 전략이 될 수 있습니다. 왼쪽 릴레이션의 현재 행 값을 오른쪽 인덱스 스캔의 키로 사용할 수 있습니다.)

  • 병합 조인: 각 관계는 조인이 시작되기 전에 조인 속성에 따라 정렬됩니다. 그런 다음 두 관계가 병렬로 스캔되고 일치하는 행이 결합되어 조인 행을 형성합니다. 이러한 종류의 조인은 각 관계를 한 번만 검색하면 되기 때문에 매력적입니다. 필요한 정렬은 명시적인 정렬 단계를 통해 또는 조인 키의 인덱스를 사용하여 적절한 순서로 관계를 검색하여 수행할 수 있습니다.

  • 해시 조인: 먼저 조인 속성을 해시 키로 사용하여 올바른 관계를 스캔하고 해시 테이블에 로드합니다. 다음으로 왼쪽 관계를 스캔하고 발견된 모든 행의 적절한 값을 해시 키로 사용하여 테이블에서 일치하는 행을 찾습니다.

쿼리가 2개 이상의 토토 캔를 포함하는 경우 최종 결과는 각각 2개의 입력이 있는 조인 단계 트리로 구성되어야 합니다. 플래너는 가능한 다양한 조인 순서를 조사하여 가장 저렴한 조인 순서를 찾습니다.

쿼리가 다음보다 적게 사용하는 경우geqo_threshold토토 캔, 최적의 조인 순서를 찾기 위해 거의 철저한 검색이 수행됩니다. 플래너는 해당 조인 절이 있는 두 토토 캔 간의 조인을 우선적으로 고려합니다.어디자격(즉, 다음과 같은 제한사항이 있는 경우)여기서 rel1.attr1=rel2.attr2존재합니다). 조인 절이 없는 조인 쌍은 다른 선택이 없는 경우에만 고려됩니다. 즉, 특정 관계에 다른 관계에 사용 가능한 조인 절이 없는 경우입니다. 플래너가 고려한 모든 조인 쌍에 대해 가능한 모든 계획이 생성되고 가장 저렴한 것으로 추정되는 계획이 선택됩니다.

언제geqo_threshold을 초과하면 고려되는 조인 시퀀스는 다음에 설명된 대로 휴리스틱에 의해 결정됩니다.토토 커뮤니티 : 문서 : 개발 : 61 장. 유전자 쿼리 최적화. 그렇지 않은 경우 프로세스는 동일합니다.

완성된 계획 트리는 기본 관계의 순차 또는 인덱스 스캔과 필요에 따른 중첩 루프, 병합 또는 해시 조인 노드와 정렬 노드 또는 집계 함수 계산 노드와 같은 필요한 보조 단계로 구성됩니다. 이러한 계획 노드 유형의 대부분에는 다음을 수행할 수 있는 추가 기능이 있습니다.선택(지정된 부울 조건을 충족하지 않는 행 삭제) 및투영(주어진 열 값을 기반으로 파생 열 집합 계산, 즉 필요한 경우 스칼라 표현식 평가). 기획자의 책임 중 하나는에서 선택 조건을 첨부하는 것입니다.어디계획 트리의 가장 적절한 노드에 대한 필수 출력 표현식의 절 및 계산.