다변량 상관 관계는 매우 간단한 데이터 세트로 입증 될 수 있습니다. 두 개의 열이있는 테이블은 모두 동일한 값을 포함합니다.
생성 테이블 t (a int, b int); t select i % 100, generate_series (1, 10000) s (i)에서 i % 100에 삽입; t; 분석
설명 된대로PostgreSQL : 문서 : 14 : 14.2. 플래너가 사용하는 메이저 토토 사이트, 플래너는의 카디널리티를 결정할 수 있습니다.t
에서 얻은 페이지와 행을 사용하여PG_CLASS
:
relname = 't'로 pg_class에서 relpages, reltuples를 선택하십시오. Relpages | 관계 ----------+----------- 45 | 10000
데이터 배포는 매우 간단합니다. 각 열에는 균일하게 분포 된 각 열에 100 개의 별개의 값 만 있습니다.
다음 예제는 A를 추정 한 결과를 보여줍니다여기서
조건a
열 :
설명 (분석, 타이밍 꺼짐)을 선택하십시오 *에서 t에서 a = 1; 쿼리 계획 --------------------------------------------------------------------------------- t에서의 seq 스캔 (cost = 0.00..170.00 행 = 100 너비 = 8) (실제 행 = 100 루프 = 1) 필터 : (a = 1) 필터로 제거 된 행 : 9900
플래너는 조건을 검사 하고이 조항의 선택성을 1%로 결정합니다. 이 추정치와 실제 행 수를 비교함으로써, 우리는 추정치가 매우 정확하다는 것을 알 수 있습니다 (실제로 테이블이 매우 작기 때문에 정확합니다). 변경여기서
사용 조건B
열에서 동일한 계획이 생성됩니다. 그러나 두 열에 동일한 조건을 적용하면를 결합하면 어떻게되는지 확인하십시오.and
:
설명 (분석, 타이밍 꺼짐)을 선택하십시오 *에서 t에서 a = 1 및 b = 1; 쿼리 계획 ---------------------------------------------------------------------------------- t에서의 seq 스캔 (cost = 0.00..195.00 행 = 1 너비 = 8) (실제 행 = 100 루프 = 1) 필터 : ((a = 1) 및 (b = 1)) 필터로 제거 된 행 : 9900
플래너는 각 조건의 선택성을 개별적으로 추정하여 위와 동일한 1% 추정치에 도달합니다. 그런 다음 조건이 독립적이라고 가정하므로 선택성을 곱하여 최종 선택성 추정치가 0.01%에 불과합니다. 조건 (100)과 일치하는 실제 행의 수가 2 배 더 높기 때문에 이것은 상당한 과소 평가입니다.
이 문제는 지시하는 사설 토토 사이트 객체를 만들어 해결할 수 있습니다분석
두 열에서 기능적 의존성 다변량 사설 토토 사이트를 계산하려면 :
a, b에서 B에 통계 Stts (종속성)를 작성합니다. 분석; 설명 (분석, 타이밍)을 선택하십시오. 쿼리 계획 --------------------------------------------------------------------------------- t에서의 seq 스캔 (cost = 0.00..195.00 행 = 100 너비 = 8) (실제 행 = 100 루프 = 1) 필터 : ((a = 1) 및 (b = 1)) 필터로 제거 된 행 : 9900
a에 의해 생성 될 그룹의 수와 같은 여러 열 세트의 카디널리티 추정치와 비슷한 문제가 발생합니다.그룹 by
절. 언제그룹 by
단일 열, n- 결정적인 추정치 (해고그 그레이트 노드에서 반환 된 추정 행의 수가 매우 정확합니다)를 나열합니다.
설명 (분석, 타이밍 끄기) t 그룹에서 Count (*)를 선택하여 a; 쿼리 계획 ------------------------------------------------------------------------------------------- 해고 그레이트 (비용 = 195.00..196.00 행 = 100 너비 = 12) (실제 행 = 100 루프 = 1) 그룹 키 : a - t에서 seq 스캔 (cost = 0.00..145.00 행 = 10000 너비 = 4) (실제 행 = 10000 루프 = 1)
그러나 다변량 사설 토토 사이트가 없으면 두 개의 열이있는 쿼리의 그룹 수에 대한 추정치그룹 by
13768_13833
설명 (분석, 타이밍 끄기) T 그룹에서 Count (*)를 선택하여 a, b; 쿼리 계획 ----------------------------------------------------------------------------------------------- 해고 그레이트 (비용 = 220.00..230.00 행 = 1000 너비 = 16) (실제 행 = 100 루프 = 1) 그룹 키 : a, b - t에서 seq 스캔 (cost = 0.00..145.00 행 = 10000 너비 = 8) (실제 행 = 10000 루프 = 1)
두 열에 대한 n- 결정 수를 포함하도록 사설 토토 사이트 개체를 재정의하면 추정치가 훨씬 향상되었습니다.
드롭 통계 Stts; t에서 a, b에서 통계 Stts (종속성, ndistinct)를 만듭니다. 분석; 설명 (분석, 타이밍)을 선택하십시오. a, b로 t 그룹에서 count (*)를 선택하십시오. 쿼리 계획 ----------------------------------------------------------------------------------------------- 해고 그레이트 (비용 = 220.00..221.00 행 = 100 너비 = 16) (실제 행 = 100 루프 = 1) 그룹 키 : a, b - t에서 seq 스캔 (cost = 0.00..145.00 행 = 10000 너비 = 8) (실제 행 = 10000 루프 = 1)
설명 된대로섹션 72.2.1, 기능적 종속성은 매우 저렴하고 효율적인 사설 토토 사이트 유형이지만 주된 제한은 글로벌 특성입니다 (개별 열 값 사이가 아닌 열 수준에서의 종속성 만 추적).
이 섹션은 다변량 변형의를 소개합니다.MCV(대부분의 공통 값) 목록, 8에 설명 된 컬럼 당 사설 토토 사이트의 직접적인 확장섹션 72.1. 이 사설 토토 사이트는 개별 값을 저장함으로써 제한을 다루지 만 사설 토토 사이트를 구축하는 측면에서 자연스럽게 더 비쌉니다.분석
, 저장 및 계획 시간.
쿼리를 보자섹션 72.2.1다시, 그러나 이번에는 A와 함께MCV동일한 열 세트에서 생성 된 목록 (기능적 종속성을 삭제하여 플래너가 새로 생성 된 사설 토토 사이트를 사용하는지 확인하십시오)..
드롭 통계 Stts; T에서 A, B에서 통계 Stts2 (MCV)를 만듭니다. 분석; 설명 (분석, 타이밍)을 선택하십시오. 쿼리 계획 --------------------------------------------------------------------------------- t에서의 seq 스캔 (cost = 0.00..195.00 행 = 100 너비 = 8) (실제 행 = 100 루프 = 1) 필터 : ((a = 1) 및 (b = 1)) 필터로 제거 된 행 : 9900
추정치는 기능적 종속성과 마찬가지로 정확합니다. 주로 테이블이 상당히 작고 뚜렷한 값이 적은 간단한 분포를 갖는 덕분입니다. 기능적 종속성에 의해 처리되지 않은 두 번째 쿼리를보기 전에 특히 잘 검사하겠습니다.MCV조금 목록.
검사MCV목록을 사용하여 가능합니다PG_MCV_LIST_ITEMS
설정 함수 설정.
선택 M.*에서 PG_STATISTIC_EXT로 가입 PG_STATISTIC_EXT_DATA ON (OID = STXOID), pg_mcv_list_items (stxdmcv) m 여기서 stxname = 'stts2'; 인덱스 | 값 | 널스 | 주파수 | base_frequency -------+----------+-------+--------------------------- 0 | 0, 0 | f, f | 0.01 | 0.0001 1 | 1, 1 | f, f | 0.01 | 0.0001 ... 49 | 49, 49 | f, f | 0.01 | 0.0001 50 | 50, 50 | f, f | 0.01 | 0.0001 ... 97 | 97, 97 | f, f | 0.01 | 0.0001 98 | 98, 98 | f, f | 0.01 | 0.0001 99 | 99, 99 | f, f | 0.01 | 0.0001 (100 줄)
이것은 두 열에 100 개의 뚜렷한 조합이 있음을 확인하고 있으며, 이들 모두는 거의 똑같이 가능성이 높습니다 (각각의 경우 1% 주파수). 기본 주파수는 다중 열 통계가없는 것처럼 컬럼 당 통계에서 계산 된 주파수입니다. 열 중 하나에 널 값이 있었다면 이것은에서 식별 될 것입니다.nulls
열.
선택성을 추정 할 때 플래너는의 항목에 모든 조건을 적용합니다.MCV목록을 작성한 다음 일치하는 주파수의 주파수를 합산합니다. 보다MCV_CLAUSELIST_Selectivity
inSRC/백엔드/통계/MCV.C
자세한 내용.
기능 의존성과 비교하여MCV목록에는 두 가지 주요 장점이 있습니다. 첫째, 목록은 실제 값을 저장하므로 어떤 조합이 호환되는지 결정할 수 있습니다.
설명 (분석, 타이밍 꺼짐)을 선택하십시오 *에서 t에서 a = 1 및 b = 10; 쿼리 계획 ---------------------------------------------------------------------------- t에서의 seq 스캔 (cost = 0.00..195.00 행 = 1 너비 = 8) (실제 행 = 0 루프 = 1) 필터 : ((a = 1) 및 (b = 10)) 필터로 제거 된 행 : 10000
둘째,MCV목록은 기능적 종속성과 같은 평등 조항뿐만 아니라 더 넓은 범위의 조항 유형을 처리합니다. 예를 들어, 동일한 테이블의 다음 범위 쿼리를 고려하십시오.
설명 (분석, 타이밍 꺼짐)을 선택하십시오 *에서 a <= 49 및 b 49; 쿼리 계획 ---------------------------------------------------------------------------- t에서의 seq 스캔 (cost = 0.00..195.00 행 = 1 너비 = 8) (실제 행 = 0 루프 = 1) 필터 : (A <= 49) 및 (B 49)) 필터로 제거 된 행 : 10000
문서에 올바른 것이 없으면 일치하지 않습니다. 특정 기능에 대한 귀하의 경험 또는 추가 설명이 필요합니다. 사용이 양식문서 문제를보고하려면