이 문서는 지원되지 않는 버전의 PostgreSQL 용입니다.
당신은에 대해 같은 페이지를 볼 수 있습니다PostgreSQL : 문서 : 17 : 11.5. 여러 윈 토토 결합버전 또는 위에 나열된 다른 지원 버전 중 하나입니다.

11.5. 여러 토토 캔 결합#

단일 토토 캔 스캔은 토토 캔의 열을 연산자 클래스의 연산자와 함께 사용하고를 사용하는 쿼리 클로만 만 사용할 수 있습니다and. 예를 들어, 토토 캔가 주어지면(A, B)쿼리 조건과 같은여기서 a = 5 및 b = 6토토 캔를 사용할 수 있지만 쿼리여기서 a = 5 또는 b = 6색인을 직접 사용할 수 없음.

다행스럽게도PostgreSQL단일 토토 캔 스캔으로 구현할 수없는 케이스를 처리하기 위해 여러 토토 캔 (동일한 토토 캔의 다중 사용 포함)를 결합 할 수 있습니다. 시스템이 형성 될 수 있습니다and또는여러 토토 캔 스캔의 조건. 예를 들어, 쿼리와 같은여기서 x = 42 또는 x = 47 또는 x = 53 또는 x = 99in 토토 캔의 4 개의 별도 스캔으로 나눌 수 있습니다x, 각각의 쿼리 절 중 하나를 사용하여 스캔합니다. 그런 다음이 스캔의 결과를 함께 뿌려 결과를 생성합니다. 또 다른 예는 별도의 인덱스가있는 경우입니다.xandy, 쿼리와 같은 가능한 하나의 구현여기서 x = 5 및 y = 6는 적절한 쿼리 조항과 함께 각 색인을 사용한 다음 인덱스 결과를 함께 사용하여 결과 행을 식별합니다.

여러 토토 캔를 결합하려면 시스템이 필요한 각 토토 캔를 스캔하고 a를 준비합니다.비트 맵메모리에서 인덱스 조건에 맞는 테이블 행의 위치를 제공합니다. 그런 다음 비트 맵은 쿼리에 의해 필요에 따라 anded 및 켜집니다. 마지막으로 실제 테이블 행이 방문하여 반환됩니다. 테이블 행은 물리적 순서로 방문됩니다. 비트 맵이 배치되는 방식이기 때문입니다. 즉, 원래 인덱스의 순서가 손실되므로 쿼리에이면 별도의 정렬 단계가 필요합니다.주문 by절. 이러한 이유로, 각 추가 토토 캔 스캔이 추가 시간을 추가하기 때문에 플래너는 추가 토토 캔를 사용할 수 있더라도 간단한 토토 캔 스캔을 사용하기로 선택합니다..

가장 간단한 애플리케이션을 제외한 모든 인덱스 조합이 유용 할 수있는 다양한 인덱스 조합이 있으며 데이터베이스 개발자는 어떤 인덱스를 제공 해야하는지 결정해야합니다. 때로는 여러 가지 색 인덱스가 가장 좋지만 때로는 별도의 인덱스를 생성하고 인덱스-컴포업 기능에 의존하는 것이 좋습니다. 예를 들어, 워크로드가 때때로 열만 포함되는 쿼리 혼합이 포함 된 경우x, 때로는 열y, 때로는 두 열이 있으면 두 개의 개별 색인을 만들도록 선택할 수 있습니다xandy, 토토 캔 조합에 의존하여 두 열을 사용하는 쿼리를 처리합니다. 에서 멀티 컬럼 토토 캔를 만들 수도 있습니다.(x, y). 이 토토 캔는 일반적으로 두 열을 포함하는 쿼리에 대한 토토 캔 조합보다 더 효율적이지만PostgreSQL : 문서 : 18 : 11.3. 멀티 컬럼 토토 결과, 전용 쿼리에 덜 유용합니다y. B-Tree Index Skip Scan 최적화가 얼마나 효과적인지에 얼마나 유용한 지; 만약에x수백 개의 별개의 값이없고 Skip Scan은 특정을 검색 할 것입니다y값은 합리적으로 효율적으로 실행됩니다. 여러 가지 색인 색인의 조합(x, y)및 별도의 색인y합리적으로 잘 제공 될 수도 있습니다. 전용 쿼리x, 멀티 컬럼 토토 캔는 사용될 수 있지만, 토토 캔의 색인보다 더 크고 느리게x마지막 대안은 세 토토 캔를 모두 만드는 것이지만, 테이블이 업데이트 된 것보다 훨씬 더 자주 검색되고 세 가지 유형의 쿼리가 모두 일반적인 경우에만 합리적 일 수 있습니다. 쿼리 유형 중 하나가 다른 쿼리보다 훨씬 덜 일반적이라면 아마도 공통 유형과 가장 잘 일치하는 두 토토 캔 만 생성 할 것입니다.