색인 구성 및 유지 관리 기능은 색인이 액세스 방법은 다음을 제공해야 합니다.
공허
ambuild(관계 힙Relation,
관계 지수관계,
IndexInfo *indexInfo);
새 사설 토토 사이트을 구축하세요. 인덱스 관계는 물리적으로
생성되었지만 비어 있습니다. 무엇이든 고정된 것으로 채워야 합니다.
액세스 방법에 필요한 데이터와 모든 튜플에 대한 항목
이미 테이블에 존재합니다. 일반적으로ambuild함수가 호출됩니다IndexBuildHeapScan()테이블을 스캔하려면
기존 튜플을 삽입하고 삽입해야 하는 키를 계산합니다.
사설 토토 사이트에 넣습니다.
부울
aminsert(관계 인덱스Relation,
데이텀 *값,
부울 *isnull,
ItemPointer heap_tid,
관계 힙관계,
bool check_uniqueness);
기존 사설 토토 사이트에 새 튜플을 삽입하십시오.값그리고isnull배열 사설 토토 사이트화할 키 값을 제공하고heap_tid은 인덱싱할 TID입니다. 액세스하는 경우 메소드는 고유 인덱스를 지원합니다(그의pg_am.amcanunique플래그가 참임) 그런 다음check_uniqueness5월 이 경우 액세스 방법은 다음을 확인해야 합니다. 충돌하는 행이 없습니다. 이것이 유일한 상황이다. 액세스 방법에는 일반적으로 다음이 필요합니다.힙관계매개변수. 참조섹션 48.511782_11989
IndexBulkDeleteResult *
ambulkdelete(관계 인덱스Relation,
IndexBulkDeleteCallback 콜백,
무효 *callback_state);
사설 토토 사이트에서 튜플을 삭제합니다. 이것은"대량 삭제"의도된 작업 전체 인덱스를 스캔하고 각 항목을 확인하여 구현 삭제해야 하는지 확인하세요. 전달된콜백함수는 스타일에서 호출될 수 있습니다.콜백(TID, callback_state)는 bool을 반환합니다., 존재 여부를 확인하기 위해 참조된 TID로 식별되는 특정 인덱스 항목은 삭제됩니다. NULL 또는 palloc'd 구조체를 반환해야 합니다. 삭제 효과에 대한 통계가 포함되어 있습니다. 작동합니다.
IndexBulkDeleteResult *
amvacuumcleanup(관계 인덱스Relation,
IndexVacuumCleanupInfo *정보,
IndexBulkDeleteResult *통계);
다음 이후 정리진공작동
(하나 이상ambulkdelete호출).
인덱스 액세스 방법은 이 기능을 제공할 필요가 없습니다.
그래서, 항목은pg_am0이어야 합니다).
제공되는 경우 일반적으로 다음과 같은 대량 정리에 사용됩니다.
빈 인덱스 페이지를 회수합니다.정보에 대한 메시지 수준과 같은 몇 가지 추가 인수를 제공합니다.
통계 보고서 및통계이다
마지막이 어떻든ambulkdelete전화
돌아왔습니다.amvacuumcleanup5월
이 구조체를 반환하기 전에 교체하거나 수정하세요. 결과가 나오면
NULL이 아니며 palloc 구조체여야 합니다. 통계는 그
포함된 내용은 다음에 의해 보고됩니다.진공if상세주어집니다.
물론 색인의 목적은 다음에 대한 검색을 지원하는 것입니다. 인덱싱 가능 항목과 일치하는 튜플어디조건, 흔히 a라고 함한정자또는스캔 키. 인덱스의 의미 스캔에 대한 자세한 내용은섹션 48.3, 아래. 스캔 관련 인덱스 액세스 방법이 제공해야 하는 함수는 다음과 같습니다.
IndexScanDesc
ambeginscan(관계 인덱스Relation,
int nkeys,
ScanKey 키);
새로운 스캔을 시작하세요.키배열(의
길이n키)은 스캔 키를 설명합니다.
인덱스 스캔을 위해 결과는 palloc'd 구조체여야 합니다. 에 대한
구현 이유 인덱스 액세스 방법반드시호출하여 이 구조체를 생성RelationGetIndexScan(). 대부분의 경우
사례ambeginscan그 자체는 그렇습니다
전화를 거는 것 외에는 거의 없습니다. 흥미로운 부분
인덱스 스캔 시작 중입니다.amrescan.
부울
amgettuple(IndexScanDesc 스캔,
스캔 방향 방향);
주어진 스캔에서 다음 튜플을 가져오며, 주어진 스캔에서 이동합니다. 방향(인덱스에서 앞으로 또는 뒤로). 다음과 같은 경우 TRUE를 반환합니다. 튜플을 얻었습니다. 일치하는 튜플이 남아 있지 않으면 FALSE입니다. 에서 TRUE 경우 튜플 TID가에 저장됩니다.스캔구조. 참고하세요"성공"색인에 다음이 포함되어 있음을 의미합니다. 튜플이 반드시 필요한 것은 아니지만 스캔 키와 일치하는 항목 여전히 힙에 존재하거나 호출자의 스냅샷을 전달합니다. 테스트.
부울
amgetmulti(IndexScanDesc 스캔,
ItemPointer tids,
int32 max_tids,
int32 *returned_tids);
주어진 스캔에서 여러 튜플을 가져옵니다. 다음과 같은 경우 TRUE를 반환합니다.
스캔은 계속되어야 하며, 일치하는 튜플이 남아 있지 않으면 FALSE입니다.tids호출자 제공 배열을 가리킴
의max_tids ItemPointerData통화가 채우는 기록
일치하는 튜플의 TID를 사용합니다.*returned_tidsTID 수로 설정됨
실제로 돌아왔습니다. 이 값은 다음보다 작을 수 있습니다.max_tids또는 반환 값이 0인 경우에도
사실입니다. (이 조항은 접근 방법이
스캔에서 가장 효율적인 중지 지점(예: 인덱스)
페이지 경계.)amgetmulti그리고amgettuple다음에서는 사용할 수 없습니다.
동일한 인덱스 스캔; 사용할 때 다른 제한 사항도 있습니다.amgetmulti, 설명된 대로PostgreSQL : 문서 : 8.1 : 색인 토토 베이.
공허
amrescan(IndexScanDesc 스캔,
ScanKey 키);
가능한 새로운 스캔 키를 사용하여 해당 스캔을 다시 시작합니다(
이전 키를 계속 사용하면 NULL이 전달됩니다.키). 번호로는 불가능하니 참고하세요
변경할 키의 수입니다. 실제로는 재시작 기능이 사용됩니다.
중첩 루프 조인에 의해 새로운 외부 튜플이 선택될 때
새로운 키 비교 값이 필요하지만 스캔 키 구조
동일하게 유지됩니다. 이 함수는 다음으로도 호출됩니다.RelationGetIndexScan()이므로 다음 용도로 사용됩니다.
인덱스 스캔의 초기 설정 및 재스캔.
공허 amendscan(IndexScanDesc 스캔);
스캔을 종료하고 리소스를 해제합니다.스캔구조체 자체는 해제되어서는 안 됩니다. 접근 방법에 의해 내부적으로 확보된 자물쇠나 핀은 반드시 석방되었습니다.
공허 ammarkpos(IndexScanDesc 스캔);
현재 스캔 위치를 표시합니다. 액세스 방법은 다음과 같습니다. 스캔당 하나의 기억된 스캔 위치를 지원합니다.
공허 amrestrpos(IndexScanDesc 스캔);
가장 최근에 표시된 위치로 스캔을 복원합니다.
공허
amcostestimate(PlannerInfo *루트,
IndexOptInfo *사설 토토 사이트,
*indexQuals 나열,
비용 *indexStartupCost,
비용 *indexTotalCost,
선택성 *indexSelectivity,
double *indexCorrelation);
인덱스 스캔 비용을 추정합니다. 이 기능은 에 자세히 설명되어 있습니다.PostgreSQL : 문서 : 8.1 : 색인 윈 토토 추정 윈 토토, 아래.
관례적으로,pg_proc항목 모든 인덱스 액세스 방법 함수는 올바른 숫자를 표시해야 합니다. 인수는 많지만 모두 유형으로 선언합니다.내부(대부분의 인수에는 다음과 같은 유형이 있으므로 SQL에 알려지지 않았으며 사용자가 어쨌든 직접적으로 기능합니다). 반환 유형은 다음과 같이 선언됩니다.무효, 내부, 또는부울적절하게.