이 장은 핵심 사이의 인터페이스를 정의합니다PostgreSQL시스템 및색인 토토 베이 방법, 개인 관리 인덱스 유형. 핵심 시스템은 인덱스를 넘어서는 아무것도 모릅니다 여기에 지정된 내용이므로 완전히 새로운 것을 개발할 수 있습니다. 애드온 코드를 작성하여 인덱스 유형.
모든 색인postgresql기술적으로 알려진 것은2 차 인덱스; 즉, 인덱스는 물리적으로 분리되어 있습니다 설명하는 테이블 파일. 각 색인은 자체로 저장됩니다 물리적관계의 항목pg_class카탈로그. 그만큼 색인의 내용은 전적으로 인덱스 제어하에 있습니다. 토토 베이 방법. 실제로, 모든 인덱스 토토 베이 방법은 분열됩니다 정규를 사용할 수 있도록 표준 크기 페이지로 인덱스 스토리지 관리자 및 버퍼 관리자는 인덱스 내용에 토토 베이 할 수 있습니다. (기존의 모든 인덱스 토토 베이 방법은 또한 표준 페이지 레이아웃에 설명 된섹션 50.3그리고 그들은 모두 사용합니다 인덱스 튜플 헤더와 동일한 형식; 그러나 이러한 결정은 그렇지 않습니다 토토 베이 방법에 강요.)
인덱스는 효과적으로 일부 데이터 키 값에서에 대한 매핑입니다.튜플 식별자또는tids, 인덱스의 행 버전 (튜플) 부모 테이블. TID는 블록 번호와 항목 번호로 구성됩니다. 그 블록 내에서 (참조섹션 50.3). 이것은 특정 정보를 가져 오기에 충분한 정보입니다 테이블에서 행 버전. 인덱스는이를 직접 알지 못합니다 MVCC에 따라 동일한 여러 현존 버전이있을 수 있습니다. 논리적 행; 인덱스에 각 튜플은 독립적 인 물체입니다 자체 인덱스 항목이 필요합니다. 따라서 항상 행의 업데이트 키 값이더라도 행의 완전히 새로운 인덱스 항목을 만듭니다. 변하지 않았습니다. 죽은 튜플에 대한 인덱스 항목은 재생됩니다 (by 진공 청소기) 죽은 튜플 자체가 되 찾을 때.
각 인덱스 토토 베이 방법은의 행으로 설명됩니다.PG_AM시스템 카탈로그 (참조섹션 42.3). 주요 내용 APG_AM행 참조PG_PROC인덱스를 식별하는 항목 토토 베이 방법에 의해 제공되는 토토 베이 기능. API 이 기능은이 장의 뒷부분에서 정의됩니다. 게다가, 그만큼PG_AM행 몇 개를 지정합니다 지원할 수 있는지 여부와 같은 액세스 방법의 속성 멀티 컬럼 인덱스. 현재 특별한 지원이 없습니다 생성 또는 삭제를 위해PG_AM항목; 새로운 토토 베이 방법을 작성할 수있는 사람은 누구나 예상됩니다. 적절한 행을 삽입 할 수 있습니다 그들 자신.
유용하려면 인덱스 액세스 방법에도 하나 또는 더운영자 클래스정의토토 핫 : 문서 :, pg_amop, 그리고pg_amproc. 이 항목은 어떤 종류의 쿼리 자격을 결정하는 플래너 이 액세스 방법의 인덱스와 함께 사용됩니다. 운영자 클래스입니다 설명토토 캔 PostgreSQL : 문서 : 8.1 : 인덱스에 대한 확장 프로그램이 장을 읽기위한 전제 조건 자료.
개별 색인은 a에 의해 정의됩니다.pg_class이를 a로 묘사하는 항목 물리적 관계, +pg_index논리를 보여주는 항목 인덱스의 내용 - 즉, 인덱스 열 세트 그리고 그 칼럼의 의미론은 관련 운영자 클래스. 인덱스 열 (키 값)은 할 수 있습니다 기본 테이블의 간단한 열이거나 표현이 되십시오. 테이블 행 위에. 인덱스 액세스 방법에는 일반적으로 아니요 인덱스 키 값이 어디에서 오는지에 대한 관심 (항상 미리 계산 된 주요 값) 그러나 매우 관심이있을 것입니다. 운영자 클래스 정보에서pg_index. 이 카탈로그 항목은 모두 할 수 있습니다 의 일부로 토토 베이해야합니다.관계모든 작업에 전달되는 데이터 구조 색인.
일부 플래그 열PG_AM끔찍한 의미가 있습니다. 그만큼 의 요구 사항Amcanuniqueare 논의토토 핫 : 문서 :및amconcurrentin섹션 48.4. 그만큼Amcanmulticol플래그는 액세스를 주장합니다 메소드는 멀티 컬럼 인덱스를 지원하는 동안amoptionalkey스캔을 허용한다고 주장합니다 첫 번째로 인덱스 가능한 제한 조항이없는 경우 색인 열. 언제Amcanmulticol거짓,amoptionalkey본질적으로 액세스 방법이 풀 인덱스를 허용하는지 여부를 말합니다 제한 조항없이 스캔합니다. 액세스 방법 여러 인덱스 열 지원필수생략 된 스캔을 지원합니다 첫 번째 후에 일부 또는 전부에 대한 제한; 그러나 그들은 약간의 제한을 요구할 수 있습니다 첫 번째 인덱스 열에 나타나면 신호가 표시됩니다. 환경AmoptionalKey거짓.AmindexNulls그 색인을 주장합니다 NULL 키 값에 대한 항목이 작성됩니다. 인덱스가 가장 많기 때문에 운영자는 엄격하므로 NULL에 대해 TRUE를 반환 할 수 없습니다. 입력, 첫눈에 매력적입니다. 널 값에 대한 항목 : 어쨌든 인덱스 스캔. 그러나이 인수는 색인 일 때 실패합니다 주어진 인덱스 열에 대한 스캔에는 제한 조항이 없습니다. ~ 안에 이것은 실천합니다.AmoptionalKeyTrue INdex nulls 플래너는 스캔 키가없는 인덱스를 사용하기로 결정할 수 있습니다. 조금도. 관련 제한은 인덱스 액세스 방법입니다 여러 인덱스 열을 지원합니다필수지원 색인 널 값을 지원합니다 플래너가 인덱스는이를 제한하지 않는 쿼리에 사용할 수 있습니다. 열. 예를 들어 (A, B)와 쿼리의 색인을 고려하십시오. 와 함께여기서 a = 4. 시스템은 할 것입니다 인덱스를 사용하여로 행을 스캔하는 데 사용될 수 있다고 가정합니다.a = 4, 인덱스가 행을 생략하면 잘못된 것입니다 어디B그러나 괜찮습니다 첫 번째 인덱스 열이 null 인 행을 생략하십시오. (요점 현재 그렇게합니다.) 따라서AmindexNulls인덱스 토토 베이 방법은 임의를 포함한 모든 행을 색인합니다 널 값의 조합.