이전 섹션에서 본 것처럼 쿼리 플래너는 쿼리로 검색된 행 수를 추정하여 만들기 위해 쿼리 계획의 좋은 선택. 이 섹션은 빠른 모양을 제공합니다 시스템이 이러한 추정치에 사용하는 통계에서.
배트맨 토토의 한 구성 요소는 총 항목 수입니다. 각 테이블과 인덱스 및 디스크 블록 수에 각 테이블과 색인으로 점유됩니다. 이 정보는 보관됩니다pg_class'sreltuplesandRelpages열. 우리는 그것을 볼 수 있습니다 이것과 유사한 쿼리 :
regression =# pg_class의 Relname, Relkind, Reltuples, Relpages를 선택하십시오 회귀-# 여기서 relname과 같은 'tenk1%'; Relname | Relkind | reltuples | 재선 ---------------+---------+-----------+---------- Tenk1 | r | 10000 | 233 Tenk1_hundred | i | 10000 | 30 Tenk1_unique1 | i | 10000 | 30 Tenk1_unique2 | i | 10000 | 30 (4 줄)
여기서 볼 수 있습니다Tenk1인덱스와 마찬가지로 10000 행이 포함되어 있지만 인덱스는 (당연히) 테이블보다 훨씬 작습니다.
효율성 이유,ReltuplesandRelpages업데이트되지 않았습니다 날개가 있으므로 일반적으로 대략적인 값 만 포함합니다 (플래너의 목적에 충분합니다). 그들은입니다 더미 값 (현재 1000 및 10 테이블이 생성 될 때 각각). 그들은 업데이트됩니다 특정 명령, 현재진공, 분석및생성 색인. 독립형분석, 그 의 일부가 아닙니다진공, an 근사치를 내다Reltuples그 이후로 가치 테이블의 모든 행을 읽지는 않습니다.
대부분의 쿼리는 테이블에서 행의 일부만 검색합니다. 때문에여기서클로즈 검사 할 행을 제한합니다. 따라서 플래너는 만들어야합니다 의 추정치선택성of여기서클로즈, 즉, 분수 의 각 조항과 일치하는 행여기서조건. 이 작업에 배트맨 토토 된 정보는에 저장됩니다.PG_STATISTIC시스템 카탈로그. 항목 안에PG_STATISTIC분석및진공 분석명령, 언제에도 근사치입니다 새로 업데이트되었습니다.
보지 않고PG_STATISTIC직접, 그 견해를 보는 것이 좋습니다PG_STATS배트맨 토토를 검사 할 때 수동으로.PG_STATS더 쉽게 읽을 수 있습니다. 뿐만 아니라,PG_STATS모두 읽을 수 있지만PG_STATISTIC는 슈퍼 유저 만 읽을 수 있습니다. (이것은 비전없는 사용자가 무언가를 배우지 못하게합니다 배트맨 토토에서 다른 사람들의 테이블의 내용. 그만큼PG_STATS보기가 표시되도록 제한됩니다 현재 배트맨 토토자가 읽을 수있는 테이블에 대한 행만.) 예를 들어, 우리는 할 수 있습니다 :
regression =# attname, n_distinct, most_common_vals pg_stats에서 tabename = 'road'; ATTNAME | n_distinct | 대부분의 _common_vals ---------+------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 이름 | -0.467008 | "I-580 Ramp", "I-880 Ramp", "SP Railroad", "I-580", "I-680 Ramp", "I-80 Ramp", "14th St", "5th St", "Mission Blvd", "I-880" thepath | 20 | "[(-122.089,37.71), (-122.0886,37.711)]"
테이블 10-1존재하는 열을 표시PG_STATS.
표 10-1.PG_STATS열
이름 | 타입 | 설명 |
---|---|---|
TableName | 이름 | 열이 포함 된 테이블 이름 |
attname | 이름 | 이 행에 의해 설명 된 열 |
null_frac | Real | null 인 열의 항목 분수 |
avg_width | 정수 | 열 항목의 바이트의 평균 너비 |
n_distinct | Real | 0보다 크면 추정 수입니다 열에서 뚜렷한 값. 0보다 적은 경우 별개의 값의 수의 음수는 행의 수. (부정 형태는분석그 수를 믿습니다 테이블이 커짐에 따라 뚜렷한 값이 증가 할 가능성이 높습니다. 긍정적 인 형태는 열에가있는 것처럼 보일 때 배트맨 토토됩니다. 가능한 값의 수정 된 수.) 예를 들어 -1 뚜렷한 수가있는 고유 한 열을 나타냅니다. 값은 행의 수와 동일합니다. |
most_common_vals | 텍스트 [] | 열에서 가장 일반적인 값 목록. (값이 어떤 것보다 더 흔하지 않은 경우 생략 기타.) |
most_common_freqs | Real [] | 가장 일반적인 값의 주파수 목록, 즉, 각각의 발생 수를 총으로 나눈 횟수 행의 수. |
histogram_bounds | 텍스트 [] | 열의 값을 대략 동등한 인구 그룹. 그만큼most_common_vals, 존재한다면, 그렇습니다 히스토그램 계산에서 생략되었습니다. (생략 된 경우 열 데이터 유형은가 없습니다.<운영자 또는most_common_vals전체 인구.) |
상관 관계 | Real | 물리적 행 순서 사이의 통계적 상관 관계 및 열 값의 논리 순서. 이것은 범위입니다 -1에서 +1. 값이 -1 또는 +1에 가까운 경우 인덱스 열의 스캔은 무작위 액세스 감소로 인해 0에 가까운 경우 디스크에. (열 데이터 유형이없는 경우 생략<운영자) |
most_common_valsandhistogram_bounds배열을 설정할 수 있습니다 Column-by-Column 기준을 배트맨 토토여ALTER 테이블 배트맨 토토 설정명령. 기본 제한은 현재 10입니다 항목. 한도를 높이면보다 정확한 플래너가 가능할 수 있습니다 특히 불규칙한 열에 대해 추정 할 수 있습니다 더 많은 공간을 소비하는 가격에 데이터 분포PG_STATISTIC약간 더 많은 시간 추정치를 계산합니다. 반대로, 하한이있을 수 있습니다 간단한 데이터 배포가있는 열에 적합합니다.