이 문서는 지원되지 않는 버전의 PostgreSQL 용입니다.
당신은에 대해 같은 페이지를 볼 수 있습니다PostgreSQL : 문서 : 17 : 62.6. 색인 토토 핫 추정 기능버전 또는 위에 나열된 다른 지원 버전 중 하나입니다.

52.6. 색인 토토 핫 추정 기능

Amcostestimate함수는입니다 가능한 색인 스캔을 설명하는 정보가 주어졌습니다 결정된 조항에 의한 위치 및 주문 목록 색인으로 사용할 수 있습니다. 토토 핫의 추정치를 반환해야합니다 인덱스 및 Where Clauses의 선택성에 액세스 (즉, 부모 테이블 행의 비율은 인덱스 스캔 중에 검색). 간단한 경우에는 거의 모든 것입니다 토토 핫 추정기의 작업은 표준으로 호출하여 수행 할 수 있습니다. 최적화의 루틴; 의 요점Amcostestimate함수는 색인을 허용하는 것입니다 경우에 따라 인덱스 유형 특이 적 지식을 제공하는 방법 표준 추정치를 개선 할 수 있습니다.

Amcostestimate함수 서명이 있어야합니다 :

무효
amcostestestimate (plannerinfo *root,
                IndexPath *Path,
                더블 루프 _count,
                Cost *IndexStartUpCost,
                토토 핫 *IndextOtalCost,
                선택성 *indexSelectivity,
                이중 *색인 상관 관계);

처음 세 매개 변수는 입력입니다 :

루트

쿼리에 대한 플래너의 정보 가공.

PATH

인덱스 액세스 경로가 고려됩니다. 모든 필드 토토 핫과 선택성 값을 제외하고는 유효합니다.

loop_count

인덱스 스캔의 반복 수 토토 핫 추정치에 고려하십시오. 이것은 일반적으로 될 것입니다 매개 변수화 된 스캔을 고려할 때 1보다 큽니다 NestLoop 조인의 내부에서 사용하십시오. 토토 핫이 필요합니다 추정치는 여전히 단 하나의 스캔에 대한 것이어야합니다. 더 큰loop_count는 그것이있을 수 있음을 의미합니다 캐싱 효과를 가로 지르는 데 적합합니다 여러 스캔.

마지막 4 개의 매개 변수는 회의 별 출력입니다 :

*INDEXSTARTUPCOST

인덱스 시작 프로세싱 토토 핫으로 설정

*IndextOtalCost

지수 처리의 총 토토 핫으로 설정

*indexSelectivity

인덱스 선택성으로 설정

*색인 상관 관계

인덱스 스캔 순서 사이의 상관 계수로 설정 그리고 기본 테이블의 주문

토토 핫 추정 기능은 C로 작성되어야합니다. SQL 또는 사용 가능한 절차 언어는 필요하기 때문입니다 플래너/최적화의 내부 데이터 구조에 액세스하십시오.

인덱스 액세스 토토 핫은 매개 변수를 사용하여 계산해야합니다. 사용SRC/백엔드/옵티마이저/PATH/COSTIZE.C: a 순차 디스크 블록 페치 토토 핫이 듭니다seq_page_cost, 비 순차적 인 페치는 토토 핫이 듭니다random_page_cost및 토토 핫 하나의 인덱스 행을 처리하는 것은 일반적으로로 취해야합니다.cpu_index_tuple_cost. 또한, 적절한 다중cpu_operator_cost인덱스 중에 호출 된 비교 연산자에 대해 청구됩니다 처리 (특히 indexquals 평가 그들 자신).

액세스 토토 핫에는 모든 디스크 및 CPU 토토 핫이 포함되어야합니다. 인덱스 자체를 스캔하는 것과 관련이 있지만not검색 토토 핫 또는 The에 의해 식별되는 부모 테이블 행을 처리합니다 색인.

the"시작 토토 핫"의 일부입니다 시작하기 전에 소비 해야하는 총 스캔 토토 핫 첫 번째 줄을 가져 오십시오. 대부분의 인덱스의 경우 이것은 0으로 사용할 수 있습니다. 그러나 시작 토토 핫이 높은 인덱스 유형은이를 설정할 수 있습니다. 0이 아닌.

theindexSelectivity설정해야합니다 부모 테이블 행의 추정 비율로 인덱스 스캔 중에 검색되었습니다. 손실 쿼리의 경우 이것은 일반적으로 행의 일부보다 높을 것입니다. 실제로 주어진 Qual 조건을 통과합니다.

the색인 상관 관계설정해야합니다 사이의 상관 관계 (-1.0과 1.0 사이)에 인덱스 순서 및 테이블 순서. 이것은 조정하는 데 사용됩니다 상위 테이블에서 행을 가져 오는 토토 핫에 대한 추정.

언제loop_count보다 큽니다 하나, 반환 된 숫자는 어느 누구에게나 예상되는 평균이어야합니다. 지수 스캔.

토토 핫 추정

일반적인 토토 핫 추정기는 다음과 같이 진행됩니다 :

  1. 부모 테이블 행의 비율을 추정하고 반환합니다 주어진 Qual 조건에 따라 방문됩니다. ~ 안에 색인 유형 특이 적 지식이 없으면 사용하십시오 표준 최적화 기능clauselist_selectivity ():

    *indexselectivity = clauselist_selectivity (root, path- indexquals,
                                               path- indexinfo- rel- 릴리드,
                                               join_inner, null);
  2. 방문 할 인덱스 행 수를 추정 스캔 중. 많은 인덱스 유형의 경우 이것은와 동일합니다.indexSelectivity타임즈 인덱스의 행 수이지만 더 많을 수도 있습니다. (메모 페이지와 행의 인덱스 크기는 그만큼path- indexinfostruct.)

  3. 할 인덱스 페이지 수를 추정하십시오 스캔 중에 검색되었습니다. 이것은 단지indexSelectivity인덱스 크기를 시간에 타십시오 페이지.

  4. 인덱스 액세스 토토 핫을 계산합니다. 일반적인 추정기가 될 수 있습니다 이렇게하십시오 :

    /*
     * 우리의 일반적인 가정은 인덱스 페이지를 읽을 것입니다.
     * 순차적으로, 따라서 그들은 random_page_cost가 아닌 seq_page_cost가 각각 비용이 듭니다.
     * 또한 각 인덱스 행에서 Indexquals 평가를 청구합니다.
     * 모든 비용은 스캔 중에 점진적으로 지불되는 것으로 가정합니다.
     */
    cost_qual_eval (& index_qual_cost, path- indexquals, root);
    *indexstartupcost = index_qual_cost.startup;
    * indextotalCost = seq_page_cost * numIndexpages +
        (cpu_index_tuple_cost + index_qual_cost.per_tuple) * numindextuples;

    그러나 상기는 상각을 설명하지 않습니다 인덱스는 반복 된 인덱스 스캔을 통해 읽습니다.

  5. 인덱스 상관 관계를 추정합니다. 간단한 주문 단일 필드에서 색인, 이것은 검색 할 수 있습니다. PG_STATISTIC. 상관 관계를 알 수없는 경우 보수적 인 추정치는 0입니다 (상관 관계 없음).

토토 핫 추정기 기능의 예는 찾을 수 있습니다.src/backend/utils/adt/selfuncs.c.