이 문서는 지원되지 않는 PostgreSQL 버전에 대한 것입니다.
당신은 다음과 같은 페이지를 보고 싶을 수도 있습니다.PostgreSQL : 문서 : 17 : 62.6. 색인 토토 핫 추정 기능버전 또는 위에 나열된 다른 지원 버전 중 하나를 사용하세요.

52.6. 지수 메이저 토토 사이트 추정 기능

amcostestimate함수는 다음을 포함하여 가능한 인덱스 스캔을 설명하는 정보 제공 다음으로 결정된 WHERE 및 ORDER BY 절 목록 인덱스와 함께 사용할 수 있습니다. 예상 비용을 반환해야 합니다. WHERE 절의 인덱스 및 선택성에 액세스 (즉, 상위 테이블 행의 비율입니다. 인덱스 스캔 중에 검색됨). 간단한 경우에는 거의 모든 메이저 토토 사이트 추정자의 작업은 표준을 호출하여 수행할 수 있습니다. 옵티마이저의 루틴; 의 요점은amcostestimate함수는 색인을 허용하는 것입니다 경우에 따라 인덱스 유형별 지식을 제공하는 액세스 방법 표준 추정치를 개선하는 것이 가능합니다.

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

공허
amcostestimate(PlannerInfo *루트,
                IndexOptInfo *색인,
                *indexQuals 나열,
                *indexOrderBys 목록,
                RelOptInfo *outer_rel,
                비용 *indexStartupCost,
                비용 *indexTotalCost,
                선택성 *indexSelectivity,
                double *indexCorrelation);

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

루트

질의에 대한 기획자의 정보는 다음과 같습니다. 처리되었습니다.

색인

색인을 고려 중입니다.

indexQuals

색인 한정절 목록(암시적으로 ANDed); 에NIL목록에 한정자가 없음을 나타냄 사용할 수 있습니다. 목록에는 표현식 트리가 포함되어 있습니다. ScanKeys가 아닌 RestrictInfo 노드가 맨 위에 있습니다.

indexOrderBys

색인 가능한 ORDER BY 연산자 목록, 또는NIL없으면. 목록에는 다음이 포함되어 있습니다. ScanKeys가 아닌 표현식 트리입니다.

outer_rel

색인이 내부 조인에 사용되도록 고려되는 경우 indexscan, 플래너의 바깥쪽 정보 조인의. 그렇지 않으면NULL. 언제 비-NULL, 일부 qual 절 단순하지 않고 이 관계와 조인 절이 될 것입니다. 제한 조항. 또한 비용추정자는 다음을 기대해야 한다. 인덱스 스캔은 각 행에 대해 반복됩니다. 외부 상대.

마지막 4개의 매개변수는 참조에 의한 전달 출력입니다.

*indexStartupCost

색인 시작 처리 비용으로 설정

*indexTotalCost

총 색인 처리 비용으로 설정

*indexSelectivity

색인 선택성으로 설정

*색인상관관계

인덱스 스캔 순서 사이의 상관 계수로 설정 및 기본 테이블의 순서

메이저 토토 사이트 추정 기능은 C가 아닌 C로 작성되어야 한다는 점에 유의하세요. SQL 또는 사용 가능한 모든 절차적 언어 플래너/옵티마이저의 내부 데이터 구조에 액세스합니다.

색인 액세스 비용은 매개변수를 사용하여 계산되어야 합니다. 에서 사용됨src/backend/optimizer/path/costsize.c: 순차 디스크 블록 가져오기에는 메이저 토토 사이트이 발생함seq_page_cost, 비순차적 가져오기에는 메이저 토토 사이트이 발생함random_page_cost및 비용 하나의 인덱스 행을 처리하는 것은 일반적으로 다음과 같이 취해야 합니다.cpu_index_tuple_cost. 또한, 적절한 의 배수cpu_operator_cost해야 합니다 인덱스 중에 호출된 비교 연산자에 대해 요금이 부과됩니다. 처리(특히 평가)indexQuals자신).

액세스 메이저 토토 사이트에는 모든 디스크 및 CPU 메이저 토토 사이트이 포함되어야 합니다. 인덱스 자체를 스캔하는 것과 관련되어 있지만아님검색 비용 또는 다음으로 식별되는 상위 테이블 행을 처리합니다. 색인.

"시작 메이저 토토 사이트"다음의 일부입니다 시작하기 전에 지출해야 하는 총 스캔 비용 첫 번째 행을 가져옵니다. 대부분의 인덱스에서 이는 0으로 간주될 수 있습니다. 하지만 시작 비용이 높은 인덱스 유형에서는 이를 설정하는 것이 좋습니다. 0이 아닙니다.

indexSelectivity설정되어야 합니다 상위 테이블 행의 예상 비율로 인덱스 스캔 중에 검색되었습니다. 손실 쿼리의 경우, 이는 일반적으로 행의 비율보다 높을 것입니다. 실제로 주어진 품질 조건을 통과합니다.

색인상관설정되어야 합니다 사이의 상관관계(-1.0에서 1.0 사이)에 인덱스 순서와 테이블 순서. 이는 조정하는 데 사용됩니다. 상위 테이블에서 행을 가져오는 데 소요되는 예상 메이저 토토 사이트입니다.

조인의 경우 반환된 숫자는 평균이어야 합니다 인덱스를 한 번 스캔할 때마다 예상됩니다.

메이저 토토 사이트 추정

일반적인 메이저 토토 사이트 추정기는 다음과 같이 진행됩니다:

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

    *indexSelectivity = 절 목록_선택(루트, indexQuals,
                                               인덱스-rel-relid,
                                               JOIN_INNER, NULL);
  2. 방문할 인덱스 행 수 추정 스캔하는 동안. 많은 인덱스 유형의 경우 이는 다음과 동일합니다.indexSelectivity배 인덱스의 행 수는 더 많을 수 있습니다. (참고 페이지와 행 단위의 인덱스 크기는 다음에서 확인할 수 있습니다.IndexOptInfo구조체.)

  3. 색인 페이지 수를 추정하세요. 스캔 중에 검색되었습니다. 이건 그냥 그럴 수도 있겠네요indexSelectivity인덱스 크기의 곱 페이지.

  4. 색인 액세스 비용을 계산합니다. 일반 추정기는 다음과 같습니다. 이렇게 하세요:

    /*
     * 우리의 일반적인 가정은 색인 페이지를 읽는다는 것입니다.
     * 순차적으로, 따라서 각각의 비용은 random_page_cost가 아닌 seq_page_cost입니다.
     * 또한 각 인덱스 행의 indexquals 평가에 대한 비용도 청구됩니다.
     * 모든 비용은 스캔하는 동안 점진적으로 지불되는 것으로 가정됩니다.
     */
    cost_qual_eval(&index_qual_cost, indexQuals, 루트);
    *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.