저자 :Tom Lane ( 작성자)
<tgl@sss.pgh.pa.us
) 2000-01-24
참고 :이것은 결국 많은 부분이되어야합니다 새로운 인덱스 액세스 방법 작성에 관한 더 큰 장.
모든 인덱스 액세스 방법은 스포츠 토토 사이트 추정을 제공해야합니다 플래너/최적화기에서 사용하는 기능. 절차의 OID 이 기능은에 나와 있습니다.Amcostestimate액세스 방법의 필드PG_AMEntry.
참고 :이전PostgreSQL7.0, 다른 체계 지수 별 스포츠 토토 사이트 추정 등록에 사용됩니다 기능.
Amcostestestime 함수에는 클로스가있는 목록이 제공됩니다. 이는 인덱스로 사용할 수있는 것으로 결정되었습니다. 해야합니다 지수에 액세스 스포츠 토토 사이트과 위치의 선택성 (즉, 분수 인덱스 스캔 중에 검색 될 주 테이블 튜플). 간단한 경우 스포츠 토토 사이트 추정기의 거의 모든 작업은 Optimizer에서 표준 루틴을 호출하여 수행해야합니다. 요점 Amcostestestimate 기능을 갖는 것은 인덱스 액세스를 허용하는 것입니다. 인덱스 유형 특이 적 지식을 제공하는 방법 표준 추정치를 개선 할 수 있습니다.
각 amcostestestime 함수는 서명이 있어야합니다.
무효 amcostestestimate (query *root, reploptinfo *rel, indexoptinfo *index, List *Indexquals, Cost *IndexStartUpCost, 스포츠 토토 사이트 *IndextOtalCost, 선택성 *indexSelectivity, 이중 *색인 상관 관계);
처음 4 개의 매개 변수는 입력입니다 :
처리중인 쿼리.
인덱스 관계가 켜져 있습니다.
색인 자체.
인덱스 Qual Clauses 목록 (암시 적으로 anded); NIL 목록은 예선을 사용할 수 없음을 나타냅니다.
마지막 4 개의 매개 변수는 회의 별 출력입니다 :
인덱스 스타트 업 프로세싱 스포츠 토토 사이트으로 설정
총 지수 처리 스포츠 토토 사이트으로 설정
인덱스 선택성으로 설정
인덱스 스캔 순서 사이의 상관 계수로 설정 그리고 기본 테이블의 주문
스포츠 토토 사이트 추정 기능은 C로 작성되어야합니다. SQL 또는 사용 가능한 절차 언어는 필요하기 때문입니다 플래너/최적화의 내부 데이터 구조에 액세스하십시오.
인덱스 액세스 스포츠 토토 사이트은에서 사용하는 단위로 계산해야합니다.src/backend/ptimizer/path/costize.c: 순차 디스크 블록 페치의 비용은 1.0, 비 순차 페치입니다. random_page_cost의 비용과 하나의 인덱스 처리 비용이 있습니다. 튜플은 일반적으로 cpu_index_tuple_cost로 취해야합니다 ( 사용자 조정 가능한 Optimizer 매개 변수). 또한, 적절한 CPU_OPERATOR_COST의 여러 가지 요금이 청구되어야합니다 인덱스 처리 중 비교 연산자 (특히 indexquals 자체 평가).
액세스 스포츠 토토 사이트에는 모든 디스크 및 CPU 스포츠 토토 사이트이 포함되어야합니다. 인덱스 자체를 스캔하는 것과 관련이 있지만 스포츠 토토 사이트은 메인 테이블 튜플을 검색하거나 처리합니다 색인으로 식별.
the"시작 스포츠 토토 사이트"의 일부입니다 시작하기 전에 소비 해야하는 총 스캔 스포츠 토토 사이트 첫 번째 튜플을 가져 오십시오. 대부분의 인덱스의 경우이를 수행 할 수 있습니다 제로이지만 시작 스포츠 토토 사이트이 높은 인덱스 유형이 0이 아닌 설정.
indexselectivity는 추정 된 비율로 설정해야합니다 인덱스 중에 검색 될 메인 테이블 튜플의 주사. 손실 인덱스의 경우 일반적으로 더 높을 것입니다. 실제로 주어진 Qual을 통과하는 튜플의 일부보다 정황.
색인 상관은 상관 관계로 설정되어야합니다 (범위 인덱스 순서와 테이블 사이의 -1.0과 1.0 사이 주문하다. 이것은 스포츠 토토 사이트에 대한 추정치를 조정하는 데 사용됩니다. 메인 테이블에서 튜플 가져 오기.
스포츠 토토 사이트 추정
일반적인 스포츠 토토 사이트 추정기는 다음과 같이 진행됩니다.
메인 테이블 튜플의 비율을 추정하고 반환합니다 주어진 Qual 조건에 따라 방문됩니다. ~ 안에 색인 유형 특이 적 지식이 없으면 사용하십시오 Standard Optimizer 함수 clauselist_selectivity () :
*indexselectivity = clauselist_selectivity (root, indexquals, lfirsti (rel- relids);
방문 할 인덱스 튜플의 수를 추정 스캔 중. 많은 인덱스 유형의 경우 이것은 동일합니다 indexselectivity 인덱스의 튜플 수를 낭비하고 그러나 더 많을 수도 있습니다. (페이지의 인덱스 크기가 있습니다 그리고 튜플은 indexoptinfo struct에서 구할 수 있습니다.)
할 인덱스 페이지 수를 추정하십시오 스캔 중에 검색되었습니다. 이것은 단지 일 수 있습니다 indexselectivity 페이지에서 인덱스 크기를 낭비합니다.
인덱스 액세스 스포츠 토토 사이트을 계산합니다. 일반적인 추정기가 될 수 있습니다 이렇게하십시오 :
/* * 우리의 일반적인 가정은 인덱스 페이지를 읽을 것입니다. * 순차적으로, 그들은 random_page_cost가 아닌 각각 1.0 달러입니다. * 또한 각 인덱스 튜플에서 Indexquals 평가를 청구합니다. * 모든 비용은 스캔 중에 점진적으로 지불되는 것으로 가정합니다. */ *indexStartUpCost = 0; *IndextOtalCost = NumIndexPages + (cpu_index_tuple_cost + cost_qual_eval (indexquals)) * numindextuples;
인덱스 상관 관계를 추정합니다. 간단한 주문 단일 필드에서 색인, 이것은 검색 할 수 있습니다. PG_STATISTIC. 상관 관계를 알 수없는 경우 보수적 인 추정치는 0입니다 (상관 관계 없음).
스포츠 토토 사이트 추정기 기능의 예는 찾을 수 있습니다.src/backend/utils/adt/selfuncs.c.
컨벤션별PG_PROC입력AMCOSTESTESTIME함수 보여주다
ProretType = 0 pronargs = 8 proargtypes = 0 0 0 0 0 0 0
우리는 모든 인수에 대해 0 ( "opaque")을 사용합니다. pg_type에서 알려진 유형이 있습니다.