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

48.6. 색인 비용 추정 윈 토토

Amcostestestimate 함수에는 클로스가있는 목록이 제공됩니다. 이는 인덱스로 사용할 수있는 것으로 결정되었습니다. 해야합니다 지수에 액세스 비용과 위치의 선택성 (즉, 분수 인덱스 스캔 중에 검색되는 부모 테이블 행). 간단한 경우 비용 추정기의 거의 모든 작업은 Optimizer에서 표준 루틴을 호출하여 수행해야합니다. 요점 Amcostestestimate 윈 토토을 갖는 것은 인덱스 액세스를 허용하는 것입니다. 인덱스 유형 특이 적 지식을 제공하는 방법 표준 추정치를 개선 할 수 있습니다.

각 amcostestestime 함수는 서명이 있어야합니다 :

무효
amcostestestimate (plannerinfo *root,
                indexoptinfo *index,
                List *Indexquals,
                Cost *IndexStartUpCost,
                윈 토토 *IndextOtalCost,
                선택성 *indexSelectivity,
                이중 *색인 상관 관계);

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

루트

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

index

고려중인 색인.

indexquals

인덱스 Qual Clauses 목록 (암시 적으로 anded); NIL 목록은 예선을 사용할 수 없음을 나타냅니다. 주목하십시오 목록에는 스캔 키가 아닌 표현 나무가 포함되어 있습니다.

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

*INDEXSTARTUPCOST

인덱스 스타트 업 프로세싱 윈 토토으로 설정

*IndextOtalCost

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

*indexSelectivity

인덱스 선택성으로 설정

*색인 상관 관계

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

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

인덱스 액세스 윈 토토은에서 사용하는 단위로 계산해야합니다.SRC/백엔드/최적화/PATH/COSTIZE.C: 순차 디스크 블록 페치의 윈 토토은 1.0, 비 순차 페치입니다. 윈 토토이 있습니다random_page_cost및 윈 토토 하나의 인덱스 행을 처리하는 것은 일반적으로로 취해야합니다.cpu_index_tuple_cost. 또한, 적절한 다중cpu_operator_cost인덱스 중에 호출 된 비교 연산자에 대해 청구됩니다 처리 (특히 indexquals 평가 그들 자신).

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

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

indexSelectivity는 추정 된 비율로 설정해야합니다 인덱스 중에 검색 될 상위 테이블 행 중 주사. 손실 인덱스의 경우 일반적으로 더 높을 것입니다. 실제로 주어진 Qual을 통과하는 행의 일부보다 정황.

색인 상관은 상관 관계로 설정되어야합니다 (범위 인덱스 순서와 테이블 사이의 -1.0과 1.0 사이 주문하다. 이것은 윈 토토에 대한 추정치를 조정하는 데 사용됩니다. 상위 테이블에서 행을 가져 오기.

윈 토토 추정

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

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

    *indexselectivity = clauselist_selectivity (root, indexquals,
                                               index- ​​rel- relid, join_inner);
  2. 방문 할 인덱스 행 수를 추정 스캔 중. 많은 인덱스 유형의 경우 이것은 동일합니다 IndexSelectivity는 인덱스의 행 수를 곱하지만 더 많을 수도 있습니다. (페이지의 인덱스 크기와 줄은 indexoptinfo struct에서 사용할 수 있습니다.)

  3. 할 인덱스 페이지 수를 추정하십시오 스캔 중에 검색되었습니다. 이것은 단지 일 수 있습니다 indexselectivity 페이지에서 인덱스 크기를 낭비합니다.

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

    /*
         * 우리의 일반적인 가정은 인덱스 페이지를 읽을 것입니다.
         * 순차적으로, 그들은 random_page_cost가 아닌 각각 1.0 달러입니다.
         * 또한 각 인덱스 행에서 Indexquals 평가를 청구합니다.
         * 모든 비용은 스캔 중에 점진적으로 지불되는 것으로 가정합니다.
         */
        cost_qual_eval (& index_qual_cost, indexquals);
        *indexstartupcost = index_qual_cost.startup;
        *IndextOtalCost = NumIndexPages +
            (cpu_index_tuple_cost + index_qual_cost.per_tuple) * numindextuples;
  5. 지수 상관을 추정합니다. 간단한 주문 단일 필드에서 색인, 이것은 검색 할 수 있습니다. PG_STATISTIC. 상관 관계를 알 수없는 경우 보수적 인 추정치는 0입니다 (상관 관계 없음).

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