단일 인덱스 스캔은 다음을 사용하는 쿼리 절만 사용할 수 있습니다. 연산자 클래스의 연산자가 있는 인덱스의 열은 다음과 같습니다. 와 합류했습니다.그리고. 예를 들어, 주어진 색인(a, b)다음과 같은 쿼리 조건a = 5 AND b = 6인 경우다음을 사용할 수 있습니다 색인이지만 쿼리는 다음과 같습니다.a = 5 또는 b =인 경우 6색인을 직접 사용할 수 없습니다.
릴리스 8.1부터 시작,PostgreSQL토토 꽁 머니하는 능력이 있습니다 여러 인덱스(동일 인덱스의 여러 사용 포함) 단일 인덱스 스캔으로 구현할 수 없는 경우를 처리합니다. 시스템이 형성될 수 있습니다그리고그리고또는여러 인덱스 스캔에 걸친 조건. 에 대한 예를 들어, 다음과 같은 쿼리는어디에서 x = 42 또는 x = 47 또는 x = 53 또는 x = 994개로 분리될 수 있습니다. 토토 꽁 머니 스캔x, 각 스캔은 다음을 사용합니다. 쿼리 절 중 하나입니다. 이러한 스캔 결과는 다음과 같습니다. OR을 함께 사용하여 결과를 생성합니다. 또 다른 예는 다음과 같습니다. 별도의 색인이 있습니다.x그리고y, 가능한 구현 중 하나 다음과 같은 쿼리x = 5 AND y = 6인 경우다음에 적절한 쿼리 절과 함께 각 인덱스를 사용한 다음 AND 결과를 색인화하여 결과 행을 식별합니다.
여러 색인을 토토 꽁 머니하기 위해 시스템은 필요한 각각을 검색합니다. 색인을 생성하고 준비합니다.비트맵메모리에 일치하는 것으로 보고된 테이블 행의 위치 제공 해당 인덱스의 조건입니다. 그런 다음 비트맵은 AND 및 OR로 연결됩니다. 쿼리에 따라 필요에 따라 함께 사용됩니다. 마지막으로 실제 테이블 행 방문하고 돌아왔습니다. 테이블 행은 물리적으로 방문됩니다. 순서는 비트맵이 배치되는 방식이기 때문입니다. 이것은 의미한다 원래 인덱스의 순서가 손실되므로 쿼리에 다음이 있는 경우 별도의 정렬 단계가 필요합니다.주문 기준절. 이런 이유 때문에, 그리고 각각의 추가 인덱스 스캔으로 시간이 더 추가되면 플래너가 때때로 추가 인덱스가 있어도 단순 인덱스 스캔을 사용하도록 선택 사용할 수도 있는 것도 있습니다.
가장 단순한 응용프로그램을 제외한 모든 응용프로그램에는 다양한 유용할 수 있는 인덱스의 조합과 데이터베이스 개발자는 어떤 인덱스를 사용할지 결정하기 위해 균형을 맞춰야 합니다. 제공합니다. 때로는 다중 열 인덱스가 가장 좋지만 때로는 별도의 인덱스를 생성하고 이에 의존하는 것이 더 좋습니다. 인덱스 조합 기능. 예를 들어 워크로드에 다음이 포함된 경우 때로는 열만 포함하는 쿼리 혼합x, 때로는 열만y, 때로는 두 열 모두를 선택할 수도 있습니다. 에 두 개의 별도 토토 꽁 머니를 생성합니다.x그리고y, 색인 조합을 사용하여 두 열을 모두 사용하는 쿼리를 처리합니다. 당신은 또한 만들 수 있습니다 다중 열 토토 꽁 머니(x, y). 이 토토 꽁 머니는 일반적으로 토토 꽁 머니 조합보다 더 효율적입니다. 두 열을 모두 포함하는 쿼리의 경우, 그러나 설명된 바와 같이섹션 11.3거의 다음과 관련된 쿼리에는 쓸모가 없습니다.y그러니까 유일한 색인이 될 수는 없습니다. 여러 열의 조합 토토 꽁 머니 및 별도의 토토 꽁 머니y그러겠다 합리적으로 잘 봉사하십시오. 다음과 관련된 쿼리의 경우x, 다중 열 토토 꽁 머니를 사용할 수 있지만 의 토토 꽁 머니보다 크고 따라서 느립니다.x혼자. 마지막 대안은 모든 것을 생성하는 것입니다. 세 개의 인덱스가 있지만 이는 테이블이 다음과 같은 경우에만 합리적일 수 있습니다. 업데이트된 것보다 훨씬 더 자주 검색되며 세 가지 모두 쿼리 유형이 일반적입니다. 쿼리 유형 중 하나가 많은 경우 다른 것보다 덜 일반적이므로 아마도 만들기에 만족할 것입니다. 일반적인 유형과 가장 잘 일치하는 두 개의 인덱스만 있으면 됩니다.