50.6. 집행자#

theexecutorPlanner/Optimizer가 작성한 계획을 가져 와서 재귀 적으로 처리하여 필요한 행 세트를 추출합니다. 이것은 본질적으로 수요가 많은 파이프 라인 메커니즘입니다. 계획 노드가 호출 될 때마다 한 줄을 더 전달하거나 행을 전달한다고보고해야합니다.

구체적인 예를 제공하려면 상단 노드가 A라고 가정합니다.mergejoin노드. 병합을 수행하기 전에 두 행을 가져와야합니다 (각 하위 플랜에서 하나). 따라서 집행자는 재귀 적으로 스스로를 호출하여 하위 계획을 처리합니다 (첨부 된 하위 플랜으로 시작합니다LeftTree). 새로운 상단 노드 (왼쪽 서브 플랜의 상단 노드)는 A입니다.sort11085_11169SortSeqscan노드, 테이블의 실제 읽기를 나타냅니다. 이 노드를 실행하면 executor가 테이블에서 행을 가져와 호출 노드로 반환합니다. 그만큼Sort노드는 자녀를 반복해서 호출하여 모든 행을 정렬 할 것입니다. 입력이 소진되면 (하위 노드가 행 대신 널을 반환하는 하위 노드로 표시),정렬코드는 정렬을 수행하고 마지막으로 첫 번째 출력 행, 즉 첫 번째 출력 행을 반환 할 수 있습니다. 나머지 행을 저장하여 나중에 요구에 응답하여 정렬 된 순서로 전달할 수 있도록 저장됩니다.

themergejoin노드는 오른쪽 서브 플랜에서 첫 번째 행을 요구합니다. 그런 다음 두 행을 비교하여 결합 할 수 있는지 확인합니다. 그렇다면 호출자에게 조인 행을 반환합니다. 다음 통화에서 또는 즉시 현재 입력 한 쌍에 합류 할 수없는 경우 즉시 한 테이블의 다음 행 또는 다른 테이블의 행으로 진행되며 (비교가 어떻게 나왔는지에 따라) 다시 일치를 확인합니다. 결국 한 하위 계획 또는 다른 하나는 소진되고Mergejoin노드를 반환하여 더 이상 결합 행을 형성 할 수 없음을 나타냅니다.

복잡한 쿼리에는 많은 수준의 계획 노드가 포함될 수 있지만 일반적인 접근 방식은 동일합니다. 각 노드는 호출 될 때마다 다음 출력 행을 계산하고 반환합니다. 각 노드는 또한 플래너가 할당 한 선택 또는 프로젝션 표현을 적용 할 책임이 있습니다.

집행자 메커니즘은 5 가지 기본 SQL 쿼리 유형을 모두 평가하는 데 사용됩니다.select, 삽입, 업데이트, 삭제병합. 을 위한select, 최상위 종료 코드는 쿼리 플랜 트리에서 반환 한 각 행을 클라이언트에게 보내면됩니다.삽입 ... 선택, 업데이트, 삭제병합효과적으로selectS로 호출 된 특별한 최상위 계획 노드에 따라modifyTable.

삽입 ... 선택행을 최대로 먹이기modifyTable삽입. 을 위한업데이트, 플래너는 각 계산 행에 업데이트 된 모든 열 값과를 포함하도록 배열합니다.TID13781_13861modifyTableNode는 정보를 사용하여 새 업데이트 행을 생성하고 이전 행을 표시합니다. 을 위한삭제, 실제로 계획에 의해 반환되는 유일한 열은 TID이고입니다.modifyTable노드는 단순히 TID를 사용하여 각 대상 행을 방문하여 삭제했습니다. 을 위한병합, 플래너는 소스 및 대상 관계에 가입하고에 필요한 모든 열 값을 포함합니다.언제클로스, 그리고 대상 행의 TID; 이 데이터는에 공급됩니다.modifyTable노드.언제필요에 따라 대상 행을 실행 한 다음 삽입, 업데이트 또는 삭제하는 조항

간단한삽입 ... 값명령은 단일로 구성된 사소한 계획 트리를 만듭니다결과노드는 하나의 결과 행 만 계산하여이를 최대로 공급합니다modifyTable삽입을 수행하려면

정정 제출

문서에 올바른 것이없는 것이 있으면 일치하지 않습니다. 특정 기능에 대한 귀하의 경험 또는 추가 설명이 필요합니다. 사용이 양식문서 문제를보고하려면