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

46.5. 배트맨 토토/옵티마이저

의 임무배트맨 토토/옵티마이저다음에 최적의 실행 계획을 수립합니다. 주어진 SQL 쿼리(따라서 쿼리 트리)는 실제로 다양한 방식으로 실행될 수 있습니다. 각 방식은 동일한 결과를 생성합니다. 그렇다면 계산적으로 실행 가능한 경우 쿼리 최적화 프로그램은 각 항목을 검사합니다. 이러한 가능한 실행 계획을 바탕으로 궁극적으로 실행을 선택합니다. 가장 빠르게 실행될 것으로 예상되는 계획입니다.

참고:어떤 상황에서는 가능한 각 방법을 검토합니다. 실행할 수 있는 쿼리에는 과도한 양의 시간이 소요됩니다. 시간과 기억의 공간. 특히, 이는 실행할 때 발생합니다. 많은 수의 조인 작업이 포함된 쿼리입니다. 하기 위해서는 합리적인(최적일 필요는 없음) 쿼리 계획을 결정합니다. 합리적인 시간,포스트그레SQL사용유전적 쿼리 최적화 도구(참조PostgreSQL : 문서 : 9.3 : 유전자 사설 토토 사이트 옵티마이저) 때 조인 수가 임계값을 초과합니다(참조geqo_threshold).

배트맨 토토의 검색 절차는 실제로 데이터와 함께 작동합니다. 호출된 구조체경로, 이는 단순히 만큼만 포함된 계획의 축소 표현 기획자가 결정을 내리는 데 필요한 정보입니다. 이후 가장 저렴한 경로가 결정됩니다. 본격적인계획 트리실행자에게 전달되도록 구축되었습니다. 이 원하는 실행 계획을 충분히 자세하게 나타냅니다. 그것을 실행하는 실행자. 이 섹션의 나머지 부분에서는 다음을 무시합니다. 경로와 계획을 구별합니다.

46.5.1. 가능한 계획 생성

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

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

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

  • 병합 조인: 각 관계는 다음을 기준으로 정렬됩니다. 조인이 시작되기 전의 조인 속성입니다. 그렇다면 두 관계는 병렬로 스캔되고 일치하는 행이 결합되어 행을 결합하십시오. 이런 종류의 조인은 각각의 조인이 더 매력적입니다. 관계는 한 번만 스캔되어야 합니다. 필요한 정렬은 다음과 같습니다. 명시적인 정렬 단계를 통해 또는 조인 키의 인덱스를 사용하여 적절한 순서로 관계를 맺습니다.

  • 해시 조인: 올바른 관계가 첫 번째입니다. 조인 속성을 다음과 같이 사용하여 스캔하고 해시 테이블에 로드합니다. 해시 키. 다음으로 왼쪽 관계가 스캔되고 적절한 발견된 모든 행의 값은 해시 키로 사용되어 테이블의 행과 일치합니다.

쿼리가 2개 이상의 관계를 포함하는 경우 최종 결과는 각각 두 개의 조인 단계로 이루어진 조인 단계 트리로 구성되어야 합니다. 입력. 배트맨 토토는 가능한 다양한 조인 순서를 검사하여 가장 저렴한 것을 찾아보세요.

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

언제geqo_threshold초과되었습니다. 고려되는 조인 시퀀스는 다음과 같이 경험적 방법에 의해 결정됩니다. 설명됨PostgreSQL : 문서 : 9.3 : 유전자 사설 토토 사이트 옵티마이저. 그렇지 않으면 과정은 동일합니다.

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