Postgresql 9.2.24 문서 | ||||
---|---|---|---|---|
토토 핫 : 문서 : 9.2 : 색인 고유성 확인 | up | 52 장. 색인 액세스 방법 인터페이스 정의 | 사설 토토 사이트 : 문서 : 9.2 : 사설 토토 사이트 Indexes |
Amcostestimate
함수는입니다
가능한 색인 스캔을 설명하는 정보가 주어졌습니다
결정된 조항에 의한 위치 및 주문 목록
색인으로 사용할 수 있습니다. 토토 핫의 추정치를 반환해야합니다
인덱스 및 Where Clauses의 선택성에 액세스
(즉, 부모 테이블 행의 비율은
인덱스 스캔 중에 검색). 간단한 경우에는 거의 모든 것입니다
토토 핫 추정기의 작업은 표준으로 호출하여 수행 할 수 있습니다.
최적화의 루틴; 의 요점Amcostestimate
함수는 색인을 허용하는 것입니다
경우에 따라 인덱스 유형 특이 적 지식을 제공하는 방법
표준 추정치를 개선 할 수 있습니다.
각Amcostestimate
함수
서명이 있어야합니다 :
무효 amcostestestimate (plannerinfo *root, IndexPath *Path, 더블 루프 _count, Cost *IndexStartUpCost, 토토 핫 *IndextOtalCost, 선택성 *indexSelectivity, 이중 *색인 상관 관계);
처음 세 매개 변수는 입력입니다 :
쿼리에 대한 플래너의 정보 가공.
인덱스 액세스 경로가 고려됩니다. 모든 필드 토토 핫과 선택성 값을 제외하고는 유효합니다.
인덱스 스캔의 반복 수 토토 핫 추정치에 고려하십시오. 이것은 일반적으로 될 것입니다 매개 변수화 된 스캔을 고려할 때 1보다 큽니다 NestLoop 조인의 내부에서 사용하십시오. 토토 핫이 필요합니다 추정치는 여전히 단 하나의 스캔에 대한 것이어야합니다. 더 큰loop_count는 그것이있을 수 있음을 의미합니다 캐싱 효과를 가로 지르는 데 적합합니다 여러 스캔.
마지막 4 개의 매개 변수는 회의 별 출력입니다 :
인덱스 시작 프로세싱 토토 핫으로 설정
지수 처리의 총 토토 핫으로 설정
인덱스 선택성으로 설정
인덱스 스캔 순서 사이의 상관 계수로 설정 그리고 기본 테이블의 주문
토토 핫 추정 기능은 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보다 큽니다 하나, 반환 된 숫자는 어느 누구에게나 예상되는 평균이어야합니다. 지수 스캔.
토토 핫 추정
일반적인 토토 핫 추정기는 다음과 같이 진행됩니다 :
부모 테이블 행의 비율을 추정하고 반환합니다
주어진 Qual 조건에 따라 방문됩니다. ~ 안에
색인 유형 특이 적 지식이 없으면 사용하십시오
표준 최적화 기능clauselist_selectivity ()
:
*indexselectivity = clauselist_selectivity (root, path- indexquals, path- indexinfo- rel- 릴리드, join_inner, null);
방문 할 인덱스 행 수를 추정 스캔 중. 많은 인덱스 유형의 경우 이것은와 동일합니다.indexSelectivity타임즈 인덱스의 행 수이지만 더 많을 수도 있습니다. (메모 페이지와 행의 인덱스 크기는 그만큼path- indexinfostruct.)
할 인덱스 페이지 수를 추정하십시오 스캔 중에 검색되었습니다. 이것은 단지indexSelectivity인덱스 크기를 시간에 타십시오 페이지.
인덱스 액세스 토토 핫을 계산합니다. 일반적인 추정기가 될 수 있습니다 이렇게하십시오 :
/* * 우리의 일반적인 가정은 인덱스 페이지를 읽을 것입니다. * 순차적으로, 따라서 그들은 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;
그러나 상기는 상각을 설명하지 않습니다 인덱스는 반복 된 인덱스 스캔을 통해 읽습니다.
인덱스 상관 관계를 추정합니다. 간단한 주문 단일 필드에서 색인, 이것은 검색 할 수 있습니다. PG_STATISTIC. 상관 관계를 알 수없는 경우 보수적 인 추정치는 0입니다 (상관 관계 없음).
토토 핫 추정기 기능의 예는 찾을 수 있습니다.src/backend/utils/adt/selfuncs.c.