A 부분 무지개 토토은 위에 구축된 무지개 토토입니다 테이블의 하위 집합 하위 집합은 조건부로 정의됩니다. 표현식(이라고 함)술어의 부분 무지개 토토). 인덱스에는 해당 테이블에 대한 항목만 포함됩니다. 술어를 만족하는 행. 부분 인덱스는 특수 인덱스입니다. 기능이 있지만 여러 가지 상황이 있습니다. 유용합니다.
부분 무지개 토토을 사용하는 주요 이유 중 하나는 색인 생성을 피하기 위한 것입니다. 공통 가치. 공통 값(즉, 전체 테이블 행의 몇 퍼센트 이상을 차지함) 어쨌든 인덱스를 사용하지 마십시오. 해당 행을 유지할 필요가 없습니다. 인덱스에 전혀 없습니다. 이렇게 하면 인덱스 크기가 줄어들게 됩니다. 인덱스를 사용하는 쿼리의 속도를 높입니다. 속도도 빨라지겠죠 인덱스가 필요하지 않기 때문에 많은 테이블 업데이트 작업이 필요합니다. 모든 경우에 업데이트되었습니다.예 11-1다음을 보여줍니다 이 아이디어를 적용할 수 있습니다.
예제 11-1. 공통을 제외하도록 부분 인덱스 설정 값
당신이 데이터베이스에 웹 서버 접근 로그를 저장하고 있다고 가정해보세요. 대부분의 액세스는 귀하의 IP 주소 범위에서 발생합니다. 조직이지만 일부는 다른 곳에서 왔습니다(예: 전화 접속 중인 직원). 연결). IP 검색이 주로 외부 검무지개 토토 경우 액세스하는 경우 IP 범위를 인덱싱할 필요가 없을 수도 있습니다. 조직의 서브넷에 해당합니다.
다음과 같은 테이블을 가정해 보십시오:
CREATE TABLE access_log(
URL varchar,
client_ip inet,
...
);
우리의 예에 적합한 부분 무지개 토토을 생성하려면 다음 명령을 사용하십시오 다음과 같습니다:
INDEX 생성 access_log_client_ip_ix ON access_log (client_ip)
어디에 있지 않습니까(client_ip inet '192.168.100.0' AND
클라이언트_ip < inet '192.168.100.255');
이 색인을 사용할 수 있는 일반적인 쿼리는 다음과 같습니다:
선택 * access_log에서 WHERE url = '/index.html' AND client_ip = inet '212.78.10.32';
이 색인을 사용할 수 없는 쿼리는 다음과 같습니다:
선택 * access_log에서 WHERE client_ip = inet '192.168.100.23';
이러한 종류의 부분 무지개 토토에는 공통 값은 미리 결정되므로 이러한 부분 인덱스는 다음 용도에 가장 적합합니다. 변하지 않는 데이터 분포. 인덱스를 다시 만들 수 있습니다. 때때로 새로운 데이터 분포에 맞게 조정하지만 이로 인해 추가됩니다. 유지관리 노력.
부분 무지개 토토의 또 다른 가능한 용도는 값을 제외하는 것입니다 일반적인 쿼리 작업 부하가 관심이 없다는 인덱스에서 안으로; 이것은에 표시됩니다.예 11-2. 이 위에 나열된 것과 동일한 이점을 가져오지만 다음을 방지합니다."흥미롭지 않음"존재로부터의 가치 인덱스 스캔이 수익성이 있는 경우에도 해당 인덱스를 통해 액세스 그 경우에는. 분명히 이런 종류의 부분 인덱스를 설정하는 것은 시나리오에는 많은 주의와 실험이 필요합니다.
예제 11-2. 제외할 부분 인덱스 설정 흥미롭지 않은 값
청구된 것과 청구되지 않은 것이 모두 포함된 테이블이 있는 경우 청구되지 않은 주문이 전체 주문의 작은 부분을 차지하는 경우 전체 테이블이 가장 많이 액세스된 행인 경우 다음을 수행할 수 있습니다. 청구되지 않은 행에만 인덱스를 생성하여 성능을 향상시킵니다. 인덱스를 생성하는 명령은 다음과 같습니다.
CREATE INDEX 주문_unbilled_index ON 주문(order_nr)
청구된 곳이 사실이 아닙니다.
이 색인을 사용하기 위한 가능한 쿼리는 다음과 같습니다:
SELECT * FROM 주문이 청구된 곳이 사실이 아니며 AND order_nr < 10000;
그러나 색인은 다음과 같은 쿼리에도 사용될 수 있습니다. 참여하다order_nr전혀, 예:
SELECT * 청구된 주문이 사실이 아니며 금액 5000.00;
이것은 부분 무지개 토토만큼 효율적이지 않습니다.금액열은 시스템이 다음을 수행해야 하기 때문에 전체 인덱스를 스캔합니다. 다만, 미청구 건수가 상대적으로 적다면 주문, 이 부분 인덱스를 사용하여 청구되지 않은 주문 찾기 승리할 수도 있습니다.
이 쿼리는 이 무지개 토토을 사용할 수 없습니다.
SELECT * FROM 주문 WHERE order_nr = 3501;
주문 3501은 청구되거나 청구되지 않은 주문에 포함될 수 있습니다.
예 11-2또한 인덱싱된 열과 열이 술어에 사용된 것은 일치할 필요가 없습니다.PostgreSQL다음을 사용하여 부분 무지개 토토을 지원합니다. 테이블의 열만 존재하는 한 임의의 술어 색인이 포함되어 있습니다. 그러나 술어는 반드시 있어야 한다는 점을 명심하십시오. 예상되는 쿼리에 사용된 조건과 일치합니다. 지수의 혜택을 누려보세요. 정확하게 말하면 부분 인덱스를 사용할 수 있습니다. 시스템이 다음을 인식할 수 있는 경우에만 쿼리에서어디쿼리 조건이 수학적으로 암시함 색인의 술어입니다.PostgreSQL정교한 기술이 없습니다 수학적으로 등가물을 인식할 수 있는 정리 증명자 다양한 형태로 쓰여진 표현들. (이런 것뿐만 아니라 일반 정리 증명자는 만들기가 매우 어렵습니다. 실제 사용하기에는 너무 느릴 수 있습니다.) 시스템은 예를 들어 단순한 불평등의 의미를 인식합니다."x < 1"암시"x < 2"; 그렇지 않으면 술어 조건이 정확히 일치해야 합니다. 쿼리의 일부어디조건 또는 인덱스는 사용 가능한 것으로 인식되지 않습니다. 매칭은 다음에서 이루어집니다. 런타임이 아닌 쿼리 계획 시간. 결과적으로 매개변수화된 쿼리 절은 부분 인덱스에서는 작동하지 않습니다. 예를 들어 매개변수가 있는 준비된 쿼리는 다음을 지정할 수 있습니다."x < ?"절대 암시하지 않음"x < 2"가능한 모든 값에 대해 매개변수입니다.
부분 무지개 토토의 세 번째 가능한 사용에는 다음이 필요하지 않습니다. 쿼리에 전혀 사용되지 않는 인덱스입니다. 여기서 아이디어는 다음과 같이 테이블의 하위 집합에 대한 고유 인덱스입니다.예 11-3. 이 인덱스를 만족하는 행 사이에 고유성을 적용합니다. 그렇지 않은 것을 제한하지 않고 술어.
예제 11-3. 부분 고유 인덱스 설정
테스트 결과를 설명하는 테이블이 있다고 가정합니다. 우리는 바란다 하나만 있는지 확인하기 위해"성공"주어진 주제 및 대상에 대한 항목 조합이 가능하지만 여러 개가 있을 수 있습니다."실패"항목. 다음은 한 가지 방법입니다. 그것:
CREATE TABLE 테스트(
주제 텍스트,
대상 텍스트,
성공 부울,
...
);
CREATE UNIQUE INDEX 테스트_success_constraint ON 테스트(주제, 대상)
어디에서 성공;
이것은 인원이 적을 때 특히 효율적인 접근 방식입니다. 성공적인 테스트와 많은 실패.
마지막으로 부분 무지개 토토을 사용하여 시스템의 쿼리 계획 선택. 또한, 특이한 데이터 세트 배포로 인해 시스템이 실제로 인덱스를 사용하게 될 수 있습니다. 안 된다. 이 경우 인덱스는 다음과 같이 설정될 수 있습니다. 문제가 있는 쿼리에 사용할 수 있습니다. 일반적으로,포스트그레SQL합리적인 선택을 합니다. 인덱스 사용(예: 공통 값을 검색할 때 인덱스 사용을 방지하므로 이전 예에서는 실제로 인덱스 크기만 절약할 뿐이지 그렇지 않습니다. 인덱스 사용을 방지하는 데 필요함) 및 매우 잘못된 계획 선택 버그 신고의 원인이 됩니다.
부분 무지개 토토을 설정하면 최소한 쿼리 플래너가 아는 만큼만 알고 있어야 합니다. 특히 지수가 언제 수익을 낼 수 있는지 알 수 있습니다. 이 지식을 형성하는 것 색인 생성 방법에 대한 경험과 이해가 필요합니다.PostgreSQL일. 대부분의 경우, 일반 인덱스에 비해 부분 인덱스의 장점은 다음과 같습니다. 최소한의.
부분 무지개 토토에 대한 자세한 내용은 다음에서 찾을 수 있습니다. 부분 무지개 토토의 경우 , POSTGRES의 부분 무지개 토토 생성: 연구 프로젝트및일반화된 부분 인덱스 (캐시된 버전) .
| 이전 | 배트맨 토토 : 문서 : 9.3 : 배트맨 토토 9.3.25 문서화 | 다음 |
| 무지개 토토 표현식 | 토토 사이트 순위 : 문서 : 9.3 : 인덱스 | 연산자 클래스 및 운영자 가족 |