11.3. 다중 열 토토 캔#

색인은 테이블의 두 개 이상의 열에 정의될 수 있습니다. 예를 들어, 다음 형식의 테이블이 있는 경우:

테이블 테스트2 생성(
  주요 정수,
  사소한 정수,
  이름 varchar
);

(예를 들어, 당신은 당신의 것을 유지합니다/dev데이터베이스의 디렉터리...) 다음과 같은 쿼리를 자주 실행합니다.

주요한 곳에서 test2에서 이름을 선택하세요 =상수AND 미성년자 =상수;

그러면 열에 색인을 정의하는 것이 적절할 수 있습니다전공그리고사소한함께, 예:

CREATE INDEX test2_mm_idx ON test2 (주요, 부);

현재 B-트리, GiST, GIN 및 BRIN 인덱스 유형만 다중 키 열 인덱스를 지원합니다. 여러 개의 키 열이 있을 수 있는지 여부는 다음과 무관합니다.포함열을 색인에 추가할 수 있습니다. 인덱스는 다음을 포함하여 최대 32개의 열을 가질 수 있습니다.포함열. (이 제한은 구축 시 변경될 수 있습니다.포스트그레SQL; 파일을 참조하세요pg_config_manual.h.)

다중 열 B-트리 인덱스는 인덱스 열의 하위 집합을 포함하는 쿼리 조건과 함께 사용할 수 있지만 선행(가장 왼쪽) 열에 제약 조건이 있을 때 인덱스가 가장 효율적입니다. 정확한 규칙은 선행 열에 대한 등식 제약 조건과 등식 제약 조건이 없는 첫 번째 열에 대한 부등식 제약 조건이 항상 스캔되는 인덱스 부분을 제한하는 데 사용된다는 것입니다. 이러한 열의 오른쪽에 있는 열에 대한 제약 조건은 인덱스에서 확인되므로 항상 해당 테이블에 대한 방문을 저장하지만 스캔해야 하는 인덱스 부분을 반드시 줄이지는 않습니다. B-트리 인덱스 스캔이 스킵 스캔 최적화를 효과적으로 적용할 수 있는 경우 반복된 인덱스 검색을 통해 인덱스를 탐색할 때 모든 열 제약 조건을 적용합니다. 이렇게 하면 하나 이상의 열(쿼리 조건자의 최하위 인덱스 열 이전)에 기존 동등 제약 조건이 없더라도 읽어야 하는 인덱스 부분이 줄어들 수 있습니다. 건너뛰기 스캔은 인덱스 열의 가능한 모든 값과 일치하는 동적 동등 제약 조건을 내부적으로 생성하여 작동합니다(단, 쿼리 조건자에서 제공되는 동등 제약 조건이 없는 열이 제공되고 생성된 제약 조건을 쿼리 조건자의 이후 열 제약 조건과 함께 사용할 수 있는 경우에만 해당).

예를 들어, 다음에 대한 색인이 주어지면(x, y)및 쿼리 조건어디에서 y = 7700, B-트리 토토 캔 스캔은 건너뛰기 스캔 최적화를 적용할 수 있습니다. 이는 일반적으로 쿼리 플래너가 반복될 것으로 예상할 때 발생합니다.여기서 x = N AND y = 7700가능한 모든 값을 검색합니다.N(또는 모든 경우x토토 캔에 실제로 저장된 값)은 테이블에서 사용 가능한 토토 캔를 고려할 때 가장 빠른 접근 방식입니다. 이 접근 방식은 일반적으로 고유한 항목이 거의 없는 경우에만 사용됩니다.x플래너가 스캔에서 대부분의 인덱스를 건너뛸 것으로 예상하는 값입니다(대부분의 리프 페이지에 관련 튜플이 포함될 수 없기 때문입니다). 별개의 것이 많은 경우x값을 사용하는 경우 전체 토토 캔를 스캔해야 하므로 대부분의 경우 플래너는 토토 캔를 사용하는 것보다 순차 테이블 스캔을 선호합니다.

스킵 스캔 최적화는 쿼리 조건자에서 최소한 몇 가지 유용한 제약 조건이 있는 B-트리 스캔 중에 선택적으로 적용될 수도 있습니다. 예를 들어, 에 대한 토토 캔가 주어지면(a, b, c)및 쿼리 조건a = 5 AND b = 42 AND c < 77인 경우, 토토 캔는를 사용하여 첫 번째 항목에서 스캔해야 할 수도 있습니다.a= 5 그리고b= 마지막 항목까지 42a= 5. 항목 색인 생성c= 77은 테이블 수준에서 필터링할 필요가 없지만 인덱스 내에서 건너뛰는 것이 수익성이 있을 수도 있고 그렇지 않을 수도 있습니다. 건너뛰기가 발생하면 스캔은 현재 끝에서 위치를 변경하기 위해 새로운 인덱스 검색을 시작합니다.a= 5 및b= N 그룹화(즉, 첫 번째 튜플이 있는 토토 캔의 위치에서a = 5 AND b = N AND c = 77나타남), 다음 그룹화의 시작 부분(즉, 첫 번째 튜플이 있는 인덱스의 위치a = 5 AND b = N + 1나타납니다).

다중 열 GiST 토토 캔는 토토 캔 열의 하위 집합과 관련된 쿼리 조건과 함께 사용할 수 있습니다. 추가 열의 조건은 토토 캔에서 반환되는 항목을 제한하지만 첫 번째 열의 조건은 스캔해야 하는 토토 캔의 양을 결정하는 데 가장 중요한 조건입니다. 추가 열에 고유 값이 많더라도 첫 번째 열에 고유 값이 몇 개만 있으면 GiST 토토 캔는 상대적으로 효과적이지 않습니다.

여러 열 GIN 토토 캔는 토토 캔 열의 하위 집합과 관련된 쿼리 조건과 함께 사용할 수 있습니다. B-tree나 GiST와 달리 쿼리 조건이 어떤 토토 캔 열을 사용하든 토토 캔 검색 효율성은 동일합니다.

다중 열 BRIN 토토 캔는 토토 캔 열의 하위 집합과 관련된 쿼리 조건과 함께 사용할 수 있습니다. GIN과 마찬가지로 B-tree나 GiST와는 달리 토토 캔 검색 효율성은 쿼리 조건이 사용하는 토토 캔 열에 관계없이 동일합니다. 단일 테이블에 하나의 다중 열 BRIN 토토 캔 대신 여러 BRIN 토토 캔를 갖는 유일한 이유는 다른 토토 캔를 갖기 위해서입니다.pages_per_range저장 매개변수.

물론, 각 열은 색인 유형에 적합한 연산자와 함께 사용되어야 합니다. 다른 연산자가 포함된 절은 고려되지 않습니다.

다중 열 색인은 자제해서 사용해야 합니다. 대부분의 상황에서는 단일 열의 토토 캔로 충분하며 공간과 시간이 절약됩니다. 3개 이상의 열이 있는 토토 캔는 테이블 사용법이 극도로 양식화되지 않는 한 도움이 되지 않을 것입니다. 또한 참조하세요PostgreSQL : 문서 : 17 : 11.5. 여러 윈 토토 결합그리고PostgreSQL : 문서 : 17 : 11.9. 스포츠 토토 사이트 전용 스캔 및 스포츠 토토 사이트 커버다양한 색인 구성의 장점에 대한 논의입니다.

수정사항 제출

문서에 올바르지 않은 내용이 있으면 일치하지 않습니다. 특정 기능에 대한 경험이 있거나 추가 설명이 필요한 경우 이용해주세요이 양식문서 문제를 보고합니다.