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

11.3. 멀티 컬럼 토토 결과#

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

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

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

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

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

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 <77, 토토 결과는와 함께 첫 번째 항목에서 스캔해야 할 수도 있습니다.a= 5 및B= 42 마지막 항목을 통해a= 5. 토토 결과 항목C = 77은 테이블 레벨에서 필터링 할 필요가 없지만 인덱스 내에서 건너 뛰는 것은 수익성이 있거나 수익성이 없을 수도 있습니다. 건너 뛰기가 진행되면 스캔이 새로운 색인 검색을 시작하여 현재의 끝에서 자체 재배치a= 5 및B= n 그룹화 (즉, 첫 번째 튜플이있는 지수의 위치에서a = 5 및 b = n 및 c = 77나타납니다), 다음 그룹화의 시작 부분 (즉, 첫 번째 튜플이있는 지수의 위치a = 5 및 b = n + 1나타납니다).

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

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

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

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

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