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

11.7. 부분 메이저 토토 사이트

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

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

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

선택 * ac

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

또 다른 가능성은 인덱스에서 값을 제외하는 것입니다. 일반적인 쿼리 워크로드는 관심이 없습니다. 이것은에 표시됩니다.예제 11-2. 이로 인해 위에 나열된 것과 동일한 이점이 생깁니다. 그러나 그것은를 방지합니다"무관심"해당 지수를 통해 액세스하는 값은 이 경우 인덱스 스캔이 수익성이있을 수 있습니다. 분명히, 설정 이러한 종류의 시나리오에 대한 부분 인덱스는 많은 것을 필요로합니다. 치료와 실험의.

예 11-2. 부분 메이저 토토 사이트 설정 흥미롭지 않은 값 제외

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

주문에서 메이저 토토 사이트 주문 _unbilled_index 생성 (Order_nr)
    청구가 사실이 아닌 곳;

이 메이저 토토 사이트을 사용할 수있는 쿼리는입니다.

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

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

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

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

이 쿼리는이 메이저 토토 사이트을 사용할 수 없습니다.

Orders에서 Order_nr = 3501;에서 선택 * 선택 *

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

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

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

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

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

테이블 테스트 생성 (
    제목 텍스트,
    대상 텍스트,
    성공 부울,
    ...
);

테스트에서 고유 한 메이저 토토 사이트 생성 _success_constraint (주제, 대상)
    어디에서 성공;

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

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

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

부분 메이저 토토 사이트에 대한 자세한 내용은 찾을 수 있습니다.부분 메이저 토토 사이트의 사례, Postgres의 부분 메이저 토토 사이트 : 연구 프로젝트일반화 된 부분 메이저 토토 사이트.