이 문서는 지원되지 않는 버전의 PostgreSQL을위한 것입니다.
당신은에 대해 같은 페이지를 보려고 할 수 있습니다PostgreSQL : 문서 : 17 : 11.3. 멀티 컬럼 토토 캔버전 또는 위에 나열된 다른 지원 버전 중 하나입니다.

11.3. 멀티 컬럼 젠 토토#

색인은 테이블의 둘 이상의 열에 정의 될 수 있습니다. 예를 들어이 양식의 테이블이있는 경우

테이블 생성 test2 (
  주요 INT,
  사소한 int,
  이름 바르 르 차
);

(예 :/dev데이터베이스의 디렉토리 ...) 그리고 다음과 같은 쿼리를 자주 발행합니다.

test2에서 이름을 선택하여 major =Constant및 minor =상수;

그러면 열에서 젠 토토를 정의하는 것이 적절할 수 있습니다전공마이너함께, 예를 들어 :

test2에서 젠 토토 테스트 2_mm_idx 생성 (major, minor);

현재 B-Tree, Gist, Gin 및 Brin Index 유형만이 다중 키 컬럼 인덱스를 지원합니다. 여러 키 열이있을 수 있는지 여부포함열을 인덱스에 추가 할 수 있습니다. 인덱스는를 포함하여 최대 32 개의 열을 가질 수 있습니다.포함열. (이 한도는 빌드시 변경 될 수 있습니다postgresql; 파일보기pg_config_manual.h.)

멀티 컬럼 B- 트리 인덱스는 인덱스 열의 하위 집합을 포함하는 쿼리 조건과 함께 사용할 수 있지만 주요 (왼쪽) 열에 제약이있을 때 인덱스가 가장 효율적입니다. 정확한 규칙은 선행 열에 대한 평등 제약과 평등 제약이없는 첫 번째 열의 불평등 제약 조건은 항상 스캔 된 인덱스의 일부를 제한하는 데 사용됩니다. 이 열의 오른쪽 열에있는 열의 제약 조건은 인덱스에서 확인되므로 항상 테이블 방문을 적절하게 저장하지만 스캔 해야하는 인덱스 부분을 반드시 줄일 수는 없습니다. B-Tree Index Scan이 Skip Scan Optimization을 효과적으로 적용 할 수 있으면 반복 된 인덱스 검색을 통해 인덱스를 탐색 할 때 모든 열 제약 조건을 적용합니다. 이렇게하면 하나 이상의 열 (쿼리 술어에서 가장 중요한 인덱스 열 이전)이 기존의 평등 제약 조건이 부족하더라도 읽어야하는 인덱스의 일부를 줄일 수 있습니다. 스킵 스캔은 내부적으로 동적 평등 제약 조건을 생성하여 작동합니다. 인덱스 열에서 가능한 모든 값과 일치합니다 (쿼리 술어에서 오는 평등 제약이 부족한 열이 주어 지지만 생성 된 제약 조건이 쿼리의 후기 열 제약 조건과 함께 사용할 수있는 경우에만).

예를 들어, 젠 토토가 주어지면(x, y)및 쿼리 조건여기서 y = 7700, B-Tree Index Scan은 Skip Scan Optimization을 적용 할 수 있습니다. 이것은 일반적으로 쿼리 플래너가 반복 될 것으로 예상 할 때 발생합니다여기서 x = n 및 y = 7700가능한 모든 값을 검색n(또는 모든x실제로 인덱스에 저장된 값)는 테이블의 사용 가능한 색인을 고려할 때 가능한 가장 빠른 접근법입니다. 이 접근법은 일반적으로 뚜렷한 사람이 거의없는 경우에만 취합니다x플래너가 스캔이 대부분의 인덱스를 건너 뛸 것으로 기대하는 값 (대부분의 리프 페이지에는 관련 튜플이 포함될 수 없기 때문에). 뚜렷한 것이 있다면x값, 값, 그러면 전체 젠 토토를 스캔해야하므로 대부분의 경우 플래너는 젠 토토를 사용하여 순차적 테이블 스캔을 선호합니다..

스킵 스캔 최적화는 쿼리 술어에서 최소한 유용한 제약 조건을 갖는 B-Tree 스캔 중에 선택적으로 적용될 수 있습니다. 예를 들어, 젠 토토가 주어지면(A, B, C)및 쿼리 조건여기서 a = 5 및 b = 42 및 c <77a= 5 및B= 42 마지막 항목을 통해a= 5. 젠 토토 항목C = 77은 테이블 레벨에서 필터링 할 필요가 없지만 인덱스 내에서 건너 뛰는 것은 수익성이 있거나 수익성이 없을 수도 있습니다. 건너 뛰기가 진행되면 스캔이 새로운 색인 검색을 시작하여 현재의 끝에서 자체 재배치a= 5 andB= n 그룹화 (즉, 첫 번째 튜플이있는 지수의 위치에서a = 5 및 b = n 및 c = 77나타납니다), 다음 그룹화의 시작 부분 (즉, 첫 번째 튜플이있는 지수의 위치a = 5 및 b = n + 1나타납니다).

멀티 컬럼 GIST 젠 토토는 젠 토토 열의 하위 집합과 관련된 쿼리 조건과 함께 사용할 수 있습니다. 추가 열의 조건은 젠 토토에 의해 반환 된 항목을 제한하지만 첫 번째 열의 조건은 젠 토토를 스캔 해야하는 양을 결정하는 데 가장 중요한 조건입니다. 첫 번째 열이 추가 열에 뚜렷한 값이 많이 있더라도 첫 번째 열이 몇 가지 고유 한 값 만 있으면 GIST 지수는 비교적 비효율적입니다.

멀티 컬럼 진 젠 토토는 젠 토토 열의 하위 집합과 관련된 쿼리 조건과 함께 사용할 수 있습니다. B-Tree 또는 GIST와 달리 젠 토토 검색 효과는 쿼리 조건이 사용하는 젠 토토 열에 관계없이 동일합니다.

멀티 컬럼 브린 색인은 젠 토토 열의 하위 집합과 관련된 쿼리 조건과 함께 사용할 수 있습니다. 진과 마찬가지로 B-Tree 또는 GIST와 달리 젠 토토 검색 효과는 쿼리 조건이 사용하는 젠 토토 열에 관계없이 동일합니다. 단일 테이블에 하나의 멀티 컬럼 브린 색인 대신 여러 브린 젠 토토를 갖는 유일한 이유는 다른 것이기 때문입니다pages_per_range스토리지 매개 변수.

물론 각 열은 젠 토토 유형에 적합한 연산자와 함께 사용해야합니다. 다른 운영자와 관련된 조항은 고려되지 않습니다.

멀티 컬럼 젠 토토는 드물게 사용해야합니다. 대부분의 상황에서 단일 열의 젠 토토는 충분하고 공간과 시간을 절약합니다. 테이블 사용이 극도로 양식화되지 않는 한 세 개가 넘는 열이있는 젠 토토는 도움이되지 않을 것입니다. 참조 참조PostgreSQL : 문서 : 개발 : 11.5. 여러 메이저 토토 사이트 결합andPostgreSQL : 문서 : 개발 : 11.9. 메이저 토토 사이트 전용 스캔 및 메이저 토토 사이트 커버다른 젠 토토 구성의 장점에 대한 논의는