이 문서는 지원되지 않는 PostgreSQL 버전에 대한 것입니다.
당신은 다음과 같은 페이지를 보고 싶을 수도 있습니다.현재버전 또는 위에 나열된 다른 지원 버전 중 하나를 사용하세요.

기획자/최적화자

의 임무플래너/최적화 프로그램다음에 최적의 실행 계획을 수립합니다. 먼저 가능한 모든 것을 결합합니다 방법스캔 중그리고가입쿼리에 나타나는 관계. 모두 생성된 경로는 동일한 결과로 이어지며 이는 각 경로를 실행하는 데 드는 비용을 추정하고 알아내는 최적화 프로그램 어느 것이 가장 싼가요?

생성 중 가능한 배트맨 토토

플래너/최적화 프로그램은 어떤 계획을 생성해야 하는지 결정합니다. 나타나는 관계에 정의된 인덱스 유형을 기반으로 합니다. 쿼리에서. 항상 수행할 가능성이 있습니다. 관계에 대한 순차 스캔이므로 순차만을 사용하는 계획 스캔은 항상 생성됩니다. 인덱스가 관계에 정의되어 있다고 가정합니다. (예: B-트리 인덱스) 및 쿼리에 제한 사항이 포함되어 있습니다.relation.attribute OPR 상수. 만일관계.속성일치하는 경우가 있습니다. B-트리 인덱스의 키와OPR이다 '<' 이외의 다른 배트맨 토토은 B-트리를 사용하여 생성됩니다. 관계를 스캔하는 인덱스입니다. 추가 인덱스가 있는 경우 쿼리의 제한 사항이 인덱스의 키와 일치하는 경우 추가 배트맨 토토을 고려할 것입니다.

단일 스캔을 위한 모든 실행 가능한 계획을 찾은 후 관계, 관계 결합 계획이 생성됩니다. 는 플래너/옵티마이저는 두 관계 사이의 조인만 고려합니다. 해당하는 조인 절이 있는 경우(즉, 다음과 같은 제한사항어디서? rel1.attr1=rel2.attr2존재) where 자격이 있습니다. 모두 가능한 계획은 고려된 모든 조인 쌍에 대해 생성됩니다. 플래너/옵티마이저. 세 가지 가능한 조인 전략은 다음과 같습니다.

  • 중첩된 반복 조인: 오른쪽 관계는 왼쪽에서 발견된 모든 튜플에 대해 한 번 검색됩니다. 관계. 이 전략은 구현하기 쉽지만 매우 시간이 많이 걸린다.

  • 병합 정렬 조인: 각 관계는 조인이 시작되기 전에 조인 속성을 기준으로 정렬됩니다. 그런 다음 두 관계는 다음을 고려하여 함께 병합됩니다. 관계는 조인 속성에 따라 정렬됩니다. 이런 조인 모든 관계를 스캔해야 하기 때문에 더 매력적입니다. 딱 한번만요.

  • 해시 조인: 올바른 관계는 먼저 조인 속성을 해시했습니다. 다음으로 왼쪽 관계는 스캔되고 발견된 모든 튜플의 적절한 값은 다음과 같습니다. 오른쪽에 있는 튜플을 찾기 위해 해시 키로 사용됩니다. 관계.

데이터 구조 배트맨 토토의

여기서 우리는 다음에 나타나는 노드에 대해 약간 설명하겠습니다. 계획. 그림 \refplan은 쿼리에 대해 생성된 계획을 보여줍니다. 예를 들어 \refsimple_select.

배트맨 토토의 최상위 노드는 aMergeJoin두 개의 후속 노드가 있는 노드(하나는 필드에 연결됨)왼쪽나무그리고 두 번째는 필드에 연결됨오른쪽나무. 각 하위 노드는 다음을 나타냅니다. 조인의 한 관계. 위에서 언급했듯이 병합 정렬 조인 각 관계를 정렬해야 합니다. 이것이 바로 우리가 a를 찾는 이유입니다.정렬각 하위 배트맨 토토의 노드. 추가 쿼리에 제공된 자격(s.sno 2)은 가능한 한 아래로 밀리고에 연결됩니다.qpqual나뭇잎의 들판SeqScan해당 하위 배트맨 토토의 노드.

필드에 첨부된 목록병합절MergeJoin노드에는 조인에 대한 정보가 포함되어 있습니다. 속성. 값65000그리고65001에 대한바르노필드VAR노드가 다음에 표시됨병합절목록 (그리고 또한대상 목록)은 그렇지 않다는 뜻입니다. 현재 노드의 튜플을 고려해야 하지만 튜플은 다음 "더 깊은" 노드(즉, 하위 계획의 최상위 노드) 대신 사용해야 합니다.

다음에 유의하세요.정렬그리고SeqScan그림 \ref배트맨 토토에 나타나는 노드는 에대상 목록하지만 없었기 때문에 해당 항목에만 충분한 공간이 있습니다.MergeJoin노드를 그릴 수 있습니다.

플래너/옵티마이저가 수행하는 또 다른 작업은 다음을 수정하는 것입니다.운영자 ID에서특급그리고오퍼노드. 다음과 같이 앞서 언급한,포스트그레다양한 데이터 유형을 지원하며 사용자 정의도 지원합니다. 유형을 사용할 수 있습니다. 엄청난 양을 유지할 수 있도록 함수와 연산자를 시스템에 저장해야 합니다. 테이블. 각 함수와 연산자는 고유한 연산자 ID를 갖습니다. 내에서 사용되는 속성의 유형에 따라 자격 등, 적절한 운영자 ID는 다음과 같아야 합니다. 사용되었습니다.