a윈 토토 색인테이블의 하위 집합에 구축 된 색인입니다. 서브 세트는 조건부 표현식으로 정의됩니다 (술어10627_10835
윈 토토 색인을 사용하는 주요 이유 중 하나는 공통 값을 색인화하지 않도록하는 것입니다. 공통 값 (모든 테이블 행의 몇 % 이상을 차지하는 값)을 검색하는 쿼리는 어쨌든 인덱스를 사용하지 않기 때문에 인덱스에 해당 행을 전혀 보관하는 점이 없습니다. 이렇게하면 인덱스의 크기가 줄어들어 인덱스를 사용하는 쿼리 속도가 빨라집니다. 또한 모든 경우에 인덱스를 업데이트 할 필요는 없기 때문에 많은 테이블 업데이트 작업 속도를 높입니다.예 11.1이 아이디어의 적용을 보여줍니다.
예 11.1. 공통 값을 제외하기 위해 윈 토토 색인 설정
데이터베이스에 웹 서버 액세스 로그를 저장한다고 가정합니다. 대윈 토토의 액세스는 조직의 IP 주소 범위에서 비롯되지만 일부는 다른 곳에서 나옵니다 (예 : 전화 접속 연결 직원). IP의 검색이 주로 외부 액세스를위한 경우 조직의 서브넷에 해당하는 IP 범위를 색인 할 필요가 없을 것입니다.
다음과 같은 테이블을 가정합니다 :
테이블 생성 access_log ( URL VARCHAR, 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');
이 색인을 사용할 수있는 일반적인 쿼리는 다음과 같습니다.
선택 * Access_Log에서 여기서 url = '/index.html'및 client_ip = inet '212.78.10.32';
여기서 쿼리의 IP 주소는 윈 토토 색인으로 덮여 있습니다. 다음 쿼리는 인덱스에서 제외 된 IP 주소를 사용하므로 윈 토토 색인을 사용할 수 없습니다.
선택 * Access_Log에서 여기서 url = '/index.html'및 client_ip = inet '192.168.100.23';
이러한 종류의 윈 토토 색인은 공통 값을 미리 결정해야하므로 이러한 윈 토토 색인은 변경되지 않는 데이터 분포에 가장 잘 사용됩니다. 이러한 인덱스는 때때로 새로운 데이터 분포를 조정하기 위해 재현 될 수 있지만 유지 보수 노력이 추가됩니다.
윈 토토 인덱스에 대한 또 다른 사용은 일반적인 쿼리 워크로드가 관심이없는 인덱스에서 값을 제외하는 것입니다. 이것은에 표시됩니다.예 11.2. 이로 인해 위에 나열된 것과 동일한 장점이 있지만를 방지합니다.“무관심”이 인덱스를 통해 해당 인덱스를 통해 액세스하는 값은 인덱스 스캔이 수익성이있을 수 있습니다. 분명히, 이러한 종류의 시나리오에 대한 윈 토토 색인을 설정하면 많은 관리 및 실험이 필요합니다.
예 11.2. 흥미롭지 않은 값을 제외하기 위해 윈 토토 색인 설정
청구되지 않은 명령과 실행되지 않은 주문이 모두 포함 된 테이블이있는 경우, 미지급 명령이 총 테이블의 작은 윈 토토을 차지하지만 가장 접근 된 행이 가장 많이 사용되면, 달리지 않은 행에서만 인덱스를 만들어 성능을 향상시킬 수 있습니다. 색인을 생성하라는 명령은 다음과 같습니다.
주문에서 색인 orders_unbilled_index 만들기 (Order_nr) 청구가 사실이 아닌 곳;
이 색인을 사용할 수있는 쿼리는 다음과 같습니다.
선택 * 청구 된 명령에서 청구 된 명령에서 rebliced <10000;
그러나 인덱스는 포함되지 않는 쿼리에서도 사용할 수 있습니다Order_nr
전혀, 예를 들어 :
선택 * 청구 된 명령에서 청구 된 명령에서 금액 5000.00;
이것은의 윈 토토 색인만큼 효율적이지 않습니다.금액
시스템은 시스템이 전체 인덱스를 스캔해야하므로 열입니다. 그러나, 달리지 않은 명령이 상대적으로 거의 없다면,이 윈 토토 지수를 사용하여 달리지 않은 주문을 찾기 위해서는 승리가 될 수 있습니다.
이 쿼리는이 색인을 사용할 수 없음을 주목하십시오 :
선택 * Orders에서 Order_nr = 3501;에서 선택하십시오.
명령 3501은 청구되거나 구분되지 않은 명령 중 하나 일 수 있습니다.
예 11.2또한 술어에 사용 된 인덱스 열과 열이 일치 할 필요가 없음을 보여줍니다.PostgreSQL인덱싱되는 테이블의 열만 관련된 한 임의의 사전 상사가있는 부분 인덱스를 지원합니다. 그러나 술어는 색인의 혜택을받을 수있는 쿼리에 사용 된 조건과 일치해야합니다. 정확하게 말하면, 시스템이 쿼리에서만 쿼리에서 부분 인덱스를 사용할 수 있습니다.여기서
쿼리의 조건은 수학적으로 색인의 술어를 암시합니다.PostgreSQL다른 형태로 작성된 수학적으로 동등한 표현을 인식 할 수있는 정교한 정리 속담이 없습니다. (이러한 일반적인 이론 속도는 생성하기가 매우 어려울뿐만 아니라 실제로 사용하기에는 너무 느릴 것입니다.)이 시스템은 간단한 불평등의 영향을 인식 할 수 있습니다 (예 :“x <1”암시“x <2”; 그렇지 않으면 술어 조건은 쿼리의 일부와 정확히 일치해야합니다여기서
조건 또는 인덱스는 사용 가능한 것으로 인식되지 않습니다. 일치하는 것은 실행 시간이 아닌 쿼리 계획 시간에서 이루어집니다. 결과적으로, 매개 변수화 된 쿼리 클로는 윈 토토 색인과 함께 작동하지 않습니다. 예를 들어 매개 변수가있는 준비된 쿼리가 지정할 수 있습니다“x <?”결코 암시하지 않을 것입니다“x <2”매개 변수의 가능한 모든 값에 대해.
부분 인덱스에 대한 세 번째 사용은 인덱스를 쿼리로 전혀 사용해야하지 않습니다. 여기서 아이디어는와 같이 테이블의 하위 집합에 대한 고유 한 인덱스를 만드는 것입니다.예 11.3. 이것은 인덱스 술어를 만족시키는 행 사이의 고유성을 시행하고, 그렇지 않은 것을 제한하지 않고..
예 11.3. 부분 고유 인덱스 설정
테스트 결과를 설명하는 테이블이 있다고 가정하십시오. 우리는 단지 하나만 있는지 확인하고 싶습니다“성공”주어진 주제 및 대상 조합에 대한 입력이지만 수가있을 수 있습니다.“실패한”항목. 다음은 다음과 같은 방법입니다.
테이블 테스트 생성 ( 제목 텍스트, 대상 텍스트, 성공 부울, ... ); 테스트에서 고유 한 색인 생성 _success_constraint (주제, 대상) 어디에서 성공;
이것은 성공적인 테스트가 거의없고 실패한 많은 테스트가있을 때 특히 효율적인 접근법입니다. AN으로 고유 한 윈 토토 색인을 만들어 열에서 하나의 널 만 허용 할 수도 있습니다.is null
제한.
마지막으로, 윈 토토 색인을 사용하여 시스템의 쿼리 계획 선택을 무시할 수도 있습니다. 또한 독특한 배포판이있는 데이터 세트로 인해 시스템이 실제로는 안되는 경우 인덱스를 사용하게 될 수 있습니다. 이 경우 인덱스는 불쾌한 쿼리에 사용할 수 없도록 설정할 수 있습니다. 보통,PostgreSQL19488_19744
윈 토토 색인을 설정하면 쿼리 플래너가 아는 한 적어도 많은 것을 알고 있음을 명심하십시오. 특히 인덱스가 언제 수익성이 있는지 알고 있습니다. 이 지식을 형성하려면 인덱스의 지수에 대한 경험과 이해가 필요합니다.PostgreSQL작업. 대부분의 경우 일반 색인에 대한 윈 토토 색인의 장점은 최소화됩니다. 그들이 매우 비생산적인 경우가 있습니다.예 11.4.
예 11.4. 윈 토토 색인을 분할 대신 대체물로 사용하지 마십시오
예를 들어 겹치지 않는 윈 토토 인덱스 세트를 만들고 싶은 유혹을받을 수 있습니다
mytable (데이터)에서 mytable_cat_1을 생성하십시오. 여기서 범주 = 1; mytable (data)에서 index mytable_cat_2를 만듭니다. 여기서 범주 = 2; mytable (data)에서 색인 mytable_cat_3을 만듭니다. 여기서 범주 = 3; ... 색인 생성 mytable_cat_n
on mytable (data) 여기서 범주 =n
;
이것은 나쁜 생각입니다! 거의 확실하게, 당신은 단일 비 당면 지수로 더 나은 것과 같은
mytable에서 mytable_cat_data 생성 (카테고리, 데이터);
PostgreSQL : 문서 : 16 : 11.3. 멀티 컬럼 토토 사이트 추천.)이 더 큰 지수의 검색은 더 작은 인덱스에서 검색보다 몇 개의 트리 레벨을 통해 내려 가야 할 수도 있지만, 적절한 윈 토토 인덱스를 선택하는 데 필요한 플래너 노력보다 거의 저렴할 것입니다. 문제의 핵심은 시스템이 윈 토토 인덱스 간의 관계를 이해하지 못하고 현재 쿼리에 적용되는지 확인하기 위해 각각을 힘들게 테스트한다는 것입니다..
테이블이 단일 색인이 실제로 나쁜 아이디어 일 정도로 크면 대신 파티션을 사용해야합니다 (참조배트맨 토토 PostgreSQL : 문서 : 16 : 5.11. 테이블 파티셔닝). 이러한 메커니즘을 통해 시스템은 테이블과 인덱스가 겹치지 않음을 이해하고 훨씬 더 나은 성능이 가능하다는 것을 이해합니다.
윈 토토 색인에 대한 자세한 내용은 참조 할 수 있습니다.[STON89B], [olson93]및[Seshadri95].
문서에 올바르지 않은 내용이 있으면 일치하지 않습니다. 특정 기능에 대한 귀하의 경험 또는 추가 설명이 필요합니다. 사용이 양식문서 문제를보고하려면