ExecutorPlanner/Optimizer가 작성한 계획을 가져 와서 재귀 적으로 처리하여 필요한 행 세트를 추출합니다. 이것은 본질적으로 수요가 많은 파이프 라인 메커니즘입니다.
구체적인 예를 제공하려면 상단 노드가 A라고 가정합니다.mergejoin
노드. 병합을 수행하기 전에 두 행을 가져와야합니다 (각 하위 플랜에서 하나).LeftTree
). 새로운 상단 노드 (왼쪽 서브 플랜의 상단 노드)는 A입니다.Sort
10356_10436Sort
Seqscan
노드, 테이블의 실제 읽기를 나타냅니다. 이 노드를 실행하면 executor가 테이블에서 행을 가져와 호출 노드로 반환합니다.Sort
노드는 자녀를 반복해서 호출하여 모든 행을 정렬 할 것입니다. 입력이 소진되면 (하위 노드가 행 대신 널을 반환하는 하위 노드로 표시),Sort
코드는 정렬을 수행하고 마지막으로 첫 번째 출력 행, 즉 첫 번째 출력 행을 반환 할 수 있습니다. 나머지 행을 저장하여 나중에 요구에 응답하여 정렬 된 순서로 전달할 수 있도록 저장됩니다.
mergejoin
노드는 오른쪽 서브 플랜에서 첫 번째 행을 요구합니다. 그런 다음 두 행을 비교하여 결합 할 수 있는지 확인합니다.mergejoin
노드를 반환하여 더 이상 결합 행을 형성 할 수 없음을 나타냅니다.
복잡한 쿼리에는 많은 수준의 계획 노드가 포함될 수 있지만 일반적인 접근 방식은 동일합니다. 각 노드는 호출 할 때마다 다음 출력 행을 계산하고 반환합니다. 각 노드는 또한 플래너가 할당 한 선택 또는 프로젝션 표현을 적용 할 책임이 있습니다.
집행자 메커니즘은 5 가지 기본 SQL 쿼리 유형을 모두 평가하는 데 사용됩니다.select
, 삽입
, 업데이트
, 삭제
및병합
. 을 위한select
, 최상위 기관 코드는 쿼리 플랜 트리에서 반환 한 각 행을 클라이언트로 보내면됩니다.삽입 ... 선택
, 업데이트
, 삭제
및병합
효과적으로select
S로 호출 된 특별한 최상위 계획 노드에 따라modifyTable
.
삽입 ... 선택
행을 최대로 먹이기modifyTable
삽입. 을 위한업데이트
, 플래너는 각 계산 된 행이 모든 업데이트 된 열 값과를 포함하도록 배열합니다.tid11452_11528modifyTable
노드는 정보를 사용하여 새 업데이트 된 행을 생성하고 이전 행을 표시합니다. 을 위한삭제
, 실제로 계획에 의해 반환되는 유일한 열은 TID이고입니다.modifyTable
노드는 단순히 TID를 사용하여 각 대상 행을 방문하여 삭제했습니다. 을 위한병합
, 플래너는 소스 및 대상 관계에 가입하고에 필요한 모든 열 값을 포함합니다.언제
클레이즈, 대상 행의 TID; 이 데이터는에 공급됩니다.modifyTable
노드.언제
필요에 따라 대상 행을 실행하고 삽입, 업데이트 또는 삭제할 조항
간단한삽입 ... 값
명령은 단일로 구성된 사소한 계획 트리를 만듭니다결과
노드는 하나의 결과 행 만 계산하여이를 최대로 공급합니다modifyTable
삽입을 수행하려면
문서에 맞지 않는 내용이 있으면 일치하지 않습니다.이 양식문서 문제를보고하려면