이 문서는 지원되지 않는 버전의 PostgreSQL 용입니다.
당신은에 대해 같은 페이지를 볼 수 있습니다현재버전 또는 위에 나열된 다른 지원 버전 중 하나입니다.

44 장. 색인 스포츠 토토 베트맨 추정 기능

저자 :작성자Tom Laneon 2000-01-24.

참고 :이것은 결국 훨씬 더 큰 부분이되어야합니다 새로운 인덱스 액세스 방법 작성에 관한 장.

모든 인덱스 액세스 방법은 스포츠 토토 베트맨 추정을 제공해야합니다 플래너/최적화기에서 사용하는 기능. 절차의 OID 이 기능은에 나와 있습니다.Amcostestimate액세스 방법의 필드PG_AMEntry.

참고 :Postgres 7.0 이전에 다른 체계가있었습니다 지수 별 스포츠 토토 베트맨 추정 등록에 사용됩니다 기능.

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

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

무효
amcostestestimate (query *root,
                reploptinfo *rel,
                indexoptinfo *index,
                List *Indexquals,
                Cost *IndexStartUpCost,
                스포츠 토토 베트맨 *IndextOtalCost,
                selectivity *indexSelectivity);
처음 4 개의 매개 변수는 입력입니다 :
루트

처리중인 쿼리.

Rel

인덱스 관계가 켜져 있습니다.

index

색인 자체.

indexquals

인덱스 Qual Clauses 목록 (암시 적으로 anded); nil 목록 예정자가 없음을 나타냅니다.

마지막 3 개의 매개 변수는 다시 참조 별 출력입니다 :

*INDEXSTARTUPCOST

인덱스 스타트 업 프로세싱 스포츠 토토 베트맨으로 설정

*IndextOtalCost

총 지수 처리 스포츠 토토 베트맨으로 설정

*indexSelectivity

색인 선택성으로 설정

스포츠 토토 베트맨 추정 기능은 C로 작성되어야합니다. SQL 또는 사용 가능한 절차 언어는 액세스해야하기 때문입니다. 플래너/최적화의 내부 데이터 구조.

인덱스 액세스 비용은 사용하는 단위로 계산해야합니다. SRC/백엔드/OPTIMIZER/PATH/COSTIZE.C : 순차 디스크 블록 Fetch의 비용은 1.0이며, 비 순차 페치 비용은 비용이 많이 듭니다 random_page_cost 및 하나의 인덱스 튜플을 처리하는 비용은 일반적으로 cpu_index_tuple_cost (a입니다 사용자 조정 가능한 Optimizer 매개 변수). 또한, 적절한 CPU_OPERATOR_COST의 배수는 비교를 위해 요금을 청구해야합니다 인덱스 처리 중에 운영자가 호출했습니다 (특히 평가 인덱스 자체).

액세스 스포츠 토토 베트맨에는 모든 디스크 및 CPU 스포츠 토토 베트맨이 포함되어야합니다. 인덱스 자체를 스캔하는 것과 관련이 있지만 스포츠 토토 베트맨은 식별 된 주 테이블 튜플을 검색하거나 처리합니다 인덱스에 의해.

"시작 스포츠 토토 베트맨"은 총 스캔 스포츠 토토 베트맨의 일부입니다. 첫 번째 튜플을 가져 오기 전에 소비됩니다. 대부분의 경우 색인 이것은 0으로 취할 수 있지만 높은 인덱스 유형 시작 스포츠 토토 베트맨은 0이 아닌 설정을 원할 수 있습니다.

indexselectivity는 추정 된 비율로 설정해야합니다. 메인 테이블은 인덱스 스캔 중에 검색 될 튜플입니다. 손실 지수의 경우 일반적으로 실제로 주어진 Qual을 통과하는 튜플의 일부 정황.

스포츠 토토 베트맨 추정

일반적인 스포츠 토토 베트맨 추정기는 다음과 같이 진행됩니다 :

  1. 메인 테이블 튜플의 비율을 추정하고 반환합니다 주어진 품질 조건에 따라 방문됩니다. 에서 색인 유형 특이 적 지식이 없으면 사용하십시오 Standard Optimizer 함수 clauselist_selectivity () :

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

  3. 검색 할 인덱스 페이지 수를 추정 스캔 중. 이것은 단지 인덱스 선택 시간 일 수 있습니다 페이지의 색인 크기.

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

    /*
         * 우리의 일반적인 가정은 인덱스 페이지를 읽을 것입니다.
         * 순차적으로, 그들은 random_page_cost가 아닌 각각 1.0 달러입니다.
         * 또한 각 인덱스 튜플에서 Indexquals 평가를 청구합니다.
         * 모든 비용은 스캔 중에 점진적으로 지불되는 것으로 가정합니다.
         */
        *indexStartUpCost = 0;
        *IndextOtalCost = NumIndexPages +
            (cpu_index_tuple_cost + cost_qual_eval (indexquals)) * numindextuples;

스포츠 토토 베트맨 추정기 기능의 예는에서 찾을 수 있습니다.src/backend/utils/adt/selfuncs.c.

컨벤션별PG_PROC입장Amcostestimate함수가 표시

ProretType = 0
pronargs = 7
proargtypes = 0 0 0 0 0 0
우리는 모든 인수에 대해 0 ( "opaque")을 사용합니다. pg_type에서 알려진 유형이 있습니다.