이 문서는 지원되지 않는 버전의 PostgreSQL을위한 것입니다.
당신은의 동일한 페이지를 보려고 할 수 있습니다PostgreSQL : 문서 : 17 : 11.8. 사설 토토 색인버전 또는 위에 나열된 다른 지원 버전 중 하나입니다.

7.8. 무지개 토토 색인

a무지개 토토 색인는 구축 된 색인입니다 테이블의 하위 집합에; 서브 세트는 조건부로 정의됩니다 표현식 (술어의 무지개 토토 색인). 인덱스에는 해당 테이블에 대한 항목이 포함되어 있습니다 술어를 만족시키는 행.

무지개 토토 인덱스의 주요 동기는 인덱싱을 피하는 것입니다. 일반적인 값. 공통 값을 검색하는 쿼리이기 때문에 (하나 모든 테이블 행의 몇 % 이상을 차지합니다) 어쨌든 인덱스를 사용하지 않을 것입니다. 인덱스의 행. 이것은 인덱스의 크기를 줄이고 인덱스를 사용하는 쿼리 속도가 빨라집니다. 그것은 또한 인덱스가 없기 때문에 많은 테이블 업데이트 작업 속도를 높입니다. 모든 경우에 업데이트해야합니다.예 7-1쇼 이 아이디어의 적용 가능.

예 7-1. 무지개 토토 색인 설정 공통 값 제외

웹 서버 액세스 로그를 데이터 베이스. 대무지개 토토의 액세스는 귀하의 IP 범위에서 비롯됩니다 조직이지만 일부는 다른 곳에서 왔습니다 (예 : 직원 전화 접속 연결). IP의 검색이 주로 용 검색 인 경우 외부 액세스는 아마도 IP를 색인화 할 필요가 없을 것입니다. 조직의 서브넷에 해당하는 범위

다음과 같은 테이블을 가정합니다 :

테이블 생성 access_log (
    URL VAR무지개 토토AR,
    client_ip inet,
    ...
);

우리의 예에 맞는 무지개 토토 색인을 만들려면 이와 같은 명령 :

access_log (client_ip)에서 index access_log_client_ip_ix 만들기
    그렇지 않은 곳 (client_ip inet '192.168.100.0'및 client_ip <inet '192.168.100.255');

이 색인을 사용할 수있는 일반적인 쿼리는 다음과 같습니다.

선택 * ac

이 색인을 사용할 수없는 쿼리는 다음과 같습니다.

선택 * access_log에서 client_ip = inet '192.168.100.23';

이런 종류의 무지개 토토 색인이 공통 값은 사전 결정됩니다. 값 분포 인 경우 고유 (응용 프로그램의 특성으로 인해) 및 정적입니다. (시간이 지남에 따라 변하지 않음), 이것은 어렵지 않지만 공통 값은 단지 우연의 데이터로드로 인한 것입니다. 많은 유지 보수 작업이 필요할 수 있습니다.

또 다른 가능성은 인덱스에서 값을 제외하는 것입니다. 일반적인 쿼리 워크로드는 관심이 없습니다. 이것은에 표시됩니다.예제 7-2. 이로 인해 위에 나열된 것과 동일한 장점이 있지만 방지"무관심"값 인덱스가 스캔하더라도 해당 인덱스를 통해 액세스하는 것부터 이 경우 수익성이있을 수 있습니다. 분명히 무지개 토토적으로 설정 이러한 종류의 시나리오에 대한 색인은 많은 관리가 필요하며 실험.

예 7-2. 무지개 토토 색인 설정 흥미롭지 않은 값 제외

청구 및 실금이 포함 된 테이블이있는 경우 구금되지 않은 주문이 약간의 일부를 차지하는 명령 총 테이블이지만 그것들은 가장 인정받은 행입니다. 단지 인덱스를 만들어 성능을 향상시킬 수 있습니다. 채워지지 않은 행. 인덱스를 작성하라는 명령은 모양입니다 이것:

주문에서 index orders_unbilled_index 만들기 (Order_nr)
    청구가 사실이 아닌 곳;

이 색인을 사용할 수있는 쿼리는입니다.

선택 * 청구 된 명령에서 청구 된 명령에서 rebliced <10000;

그러나 인덱스는 그렇지 않은 쿼리에도 사용할 수 있습니다. 관련시키다Order_nr전혀, 예를 들어

선택 * 청구 된 명령에서 청구 된 명령 중에서도 금액이 5000.00;

이것은의 무지개 토토 색인만큼 효율적이지 않습니다.금액열은 이후입니다 시스템은 전체 인덱스를 스캔해야합니다. 그러나 있다면 이 무지개 토토 색인을 사용하여 비교적이지 않은 명령 실금되지 않은 명령을 찾는 것은 승리가 될 수 있습니다.

이 쿼리는이 색인을 사용할 수 없습니다.

select *에서 주문 _nr = 3501;

3501 명령은 청구 된 것 중 하나 일 수 있습니다. 명령.

예제 7-2또한 인덱스 된 열과 열을 보여줍니다 술어에 사용되는 것은 일치 할 필요가 없습니다.PostgreSQL무지개 토토 색인을 지원합니다 테이블의 기둥 만있는 한 임의의 사전은 색인이 관련되어 있습니다. 그러나 술어를 명심하십시오 예상되는 쿼리에 사용 된 조건과 일치해야합니다. 지수로부터 혜택을받습니다. 정확히 말하면 무지개 토토 색인이 될 수 있습니다 시스템이 쿼리의 수학적으로 조건암시색인의 술어.PostgreSQL정교함이 없습니다 수학적으로 동등한 것을 인식 할 수있는 정리 전공 다른 형태로 작성된 사전. (그런 것뿐만 아니라 일반적인 이론 속도는 만들기가 매우 어렵습니다. 아마도 실제로 사용하기에는 너무 느리게 될 것입니다.) 시스템은 예를 들어 간단한 불평등 함의 인식"x <1"암시"x <2"; 그렇지 않으면 술어 조건이 있어야합니다 조건 또는 인덱스가없는 쿼리와 정확히 일치 사용할 수있는 것으로 인식됩니다.

무지개 토토 색인에 대한 세 번째 사용은 색인이 전혀 쿼리로 사용됩니다. 여기서 아이디어는 a를 만드는 것입니다 와 같이 테이블의 하위 집합에 대한 고유 인덱스예 7-3. 이것 인덱스를 만족시키는 행 사이의 독창성을 시행합니다 술어, 그렇지 않은 것을 제한하지 않고 술어.

예 7-3. 부분적 고유 한 설정 색인

테스트 결과를 설명하는 테이블이 있다고 가정하십시오. 우리 하나만 있는지 확인하고 싶습니다"성공"주어진 주제에 대한 입장 및 대상 조합이지만 수가 있습니다."실패"항목. 여기 하나가 있습니다 그렇게하는 방법 :

테이블 테스트 생성 (주제 텍스트,
                    대상 텍스트,
                    성공 부,
                    ...);
테스트에서 고유 한 색인 생성 _success_constraint (주제, 대상)
    어디에서 성공;

이것은 거기에있을 때 특히 효율적인 방법입니다. 성공적인 시험은 거의없고 실패한 많은 시험입니다.

마지막으로 무지개 토토 색인을 사용하여 시스템의 쿼리 계획 선택. 데이터 세트가 발생할 수 있습니다 독특한 배포판은 시스템이 정말 그렇지 않아야합니다. 이 경우 인덱스를 설정할 수 있습니다. 불쾌한 쿼리에는 사용할 수 없습니다. 보통,PostgreSQL합리적입니다 인덱스 사용에 대한 선택 (예 : 검색시 피해 일반적인 값이므로 이전 예제는 실제로 인덱스를 저장합니다. 크기, 인덱스 사용을 피할 필요는 없습니다). 잘못된 계획 선택은 버그 보고서의 원인입니다.

무지개 토토 색인을 설정하는 것을 명심하십시오. 당신은 적어도 쿼리 플래너가 알고있는만큼 알고 있습니다. 특히 지수가 수익성이있을 때를 알고 있습니다. 형성 이 지식은 방법에 대한 경험과 이해가 필요합니다 인덱스postgresql작업. ~ 안에 대부분의 경우, 일반 색인에 대한 무지개 토토 색인의 장점 그다지 많지 않을 것입니다.

무지개 토토 색인에 대한 자세한 내용은 찾을 수 있습니다.무지개 토토 색인의 사례, Postgres의 무지개 토토 색인 : 연구 프로젝트일반화 된 무지개 토토 색인.