다변수 상관 관계는 매우 간단한 데이터 세트, 즉 동일한 값을 포함하는 두 개의 열이 있는 테이블로 설명할 수 있습니다.
CREATE TABLE t (a INT, b INT); INSERT INTO t SELECT i % 100, i % 100 FROM generate_series(1, 10000) s(i); 분석 t;
설명에 따라PostgreSQL : 문서 : 14 : 14.2. 플래너가 사용하는 메이저 토토 사이트, 플래너는 다음의 카디널리티를 결정할 수 있습니다.t다음에서 얻은 페이지 및 행 수 사용pg_class:
pg_class WHERE relname = 't'에서 relpages, reltuples 선택;
렐페이지 | 리트플스
---------+------------
45 | 10000
데이터 배포는 매우 간단합니다. 각 열에는 균일하게 분포된 100개의 고유 값만 있습니다.
다음 예는 a를 추정한 결과를 보여줍니다.어디조건은a열:
설명(분석, 타이밍 꺼짐) SELECT * FROM t WHERE a = 1;
쿼리 계획
------------------------------------------------------------------
t의 Seq 스캔(비용=0.00..170.00 행=100 너비=8)(실제 행=100 루프=1)
필터: (a = 1)
필터에 의해 제거된 행: 9900
플래너는 조건을 검사하고 이 절의 선택도를 1%로 결정합니다. 이 추정값과 실제 행 수를 비교하면 추정값이 매우 정확하다는 것을 알 수 있습니다. 실제로는 테이블이 매우 작기 때문에 정확합니다. 변경어디사용 조건b열, 동일한 계획이 생성됩니다. 하지만 두 열에 동일한 조건을 적용하여 다음과 같이 결합하면 어떻게 되는지 관찰해 보세요.그리고:
설명(분석, 타이밍 꺼짐) SELECT * FROM t WHERE a = 1 AND b = 1;
쿼리 계획
--------------------------------------------------------------
t에 대한 Seq 스캔(비용=0.00..195.00행=1너비=8)(실제 행=100루프=1)
필터: ((a = 1) AND (b = 1))
필터에 의해 제거된 행: 9900
플래너는 각 조건에 대한 선택성을 개별적으로 추정하여 위와 동일한 1% 추정치에 도달합니다. 그런 다음 조건이 독립적이라고 가정하고 선택성을 곱하여 최종 선택도 추정치는 0.01%에 불과합니다. 조건(100)과 일치하는 실제 행 수가 2배 더 높기 때문에 이는 상당히 과소평가된 것입니다.
이 문제는 다음을 지시하는 통계 개체를 생성하여 해결할 수 있습니다.분석두 열에 대한 기능 의존성 다변량 사설 토토 사이트를 계산하려면:
t에서 a, b에 대한 통계 stts(종속성) 생성;
분석 t;
설명(분석, 타이밍 꺼짐) SELECT * FROM t WHERE a = 1 AND b = 1;
쿼리 계획
------------------------------------------------------------------
t의 Seq 스캔(비용=0.00..195.00 행=100 너비=8)(실제 행=100 루프=1)
필터: ((a = 1) AND (b = 1))
필터에 의해 제거된 행: 9900
다음에 의해 생성될 그룹 수와 같은 여러 열 집합의 카디널리티를 추정할 때 유사한 문제가 발생합니다.그룹별절. 언제그룹별단일 열을 나열하며, n개의 구별 추정치(HashAggregate 노드에서 반환된 추정 행 수로 표시됨)는 매우 정확합니다.
설명(분석, 타이밍 꺼짐) SELECT COUNT(*) FROM t GROUP BY a;
쿼리 계획
----------------------------------------------------------------------------
HashAggregate (비용=195.00..196.00 행=100 너비=12) (실제 행=100 루프=1)
그룹 키:
- t에 대한 Seq 스캔(비용=0.00..145.00 행=10000 너비=4)(실제 행=10000 루프=1)
그러나 다변량 사설 토토 사이트가 없으면 두 개의 열이 있는 쿼리의 그룹 수에 대한 추정은그룹별은 다음 예에서와 같이 크기 순서에서 벗어났습니다.
설명(분석, 타이밍 꺼짐) SELECT COUNT(*) FROM t GROUP BY a, b;
쿼리 계획
-------------------------------------------------------------------------------
HashAggregate (비용=220.00..230.00 행=1000 너비=16) (실제 행=100 루프=1)
그룹 키: a, b
- t에 대한 Seq 스캔(비용=0.00..145.00 행=10000 너비=8)(실제 행=10000 루프=1)
두 열에 대한 n-고유 개수를 포함하도록 사설 토토 사이트 개체를 재정의함으로써 추정치가 훨씬 향상되었습니다.
통계 삭제 stts;
통계 생성 stts(종속성, ndistinct) ON a, b FROM t;
분석 t;
설명(분석, 타이밍 꺼짐) SELECT COUNT(*) FROM t GROUP BY a, b;
쿼리 계획
-------------------------------------------------------------------------------
HashAggregate (비용=220.00..221.00 행=100 너비=16) (실제 행=100 루프=1)
그룹 키: a, b
- t에 대한 Seq 스캔(비용=0.00..145.00 행=10000 너비=8)(실제 행=10000 루프=1)
설명에 따라섹션 72.2.1, 기능적 종속성은 매우 저렴하고 효율적인 사설 토토 사이트 유형이지만 주요 제한 사항은 전역적 특성입니다(개별 열 값 간이 아닌 열 수준에서만 종속성을 추적함).
이 섹션에서는 다음의 다변량 변형을 소개합니다.MCV(가장 일반적인 값) 목록, 설명된 열별 사설 토토 사이트의 간단한 확장입니다.섹션 72.1. 이러한 사설 토토 사이트는 개별 값을 저장하여 제한 사항을 해결하지만 사설 토토 사이트를 구축하는 측면에서 당연히 비용이 더 많이 듭니다.분석, 저장 및 계획 시간.
다음의 쿼리를 살펴보겠습니다.섹션 72.2.1다시 말하지만 이번에는MCV동일한 열 집합에 목록이 생성되었습니다(플래너가 새로 생성된 사설 토토 사이트를 사용하도록 기능 종속성을 삭제해야 합니다).
통계 삭제 stts;
t에서 a, b에 대한 통계 stts2(mcv) 생성;
분석 t;
설명(분석, 타이밍 꺼짐) SELECT * FROM t WHERE a = 1 AND b = 1;
쿼리 계획
------------------------------------------------------------------
t의 Seq 스캔(비용=0.00..195.00 행=100 너비=8)(실제 행=100 루프=1)
필터: ((a = 1) AND (b = 1))
필터에 의해 제거된 행: 9900
추정치는 기능 종속성만큼 정확합니다. 이는 주로 테이블이 상당히 작고 고유한 값 수가 적은 단순한 분포를 갖기 때문입니다. 함수적 종속성에 의해 특별히 잘 처리되지 않았던 두 번째 쿼리를 살펴보기 전에 먼저 다음 쿼리를 살펴보겠습니다.MCV조금 나열해 보세요.
점검 중MCV목록은 다음을 사용하여 가능합니다.pg_mcv_list_items세트 반환 함수.
m을 선택하세요.* pg_statistic_ext에서 pg_statistic_ext_data에 조인(oid = stxoid),
pg_mcv_list_items(stxdmcv) m WHERE stxname = 'stts2';
색인 | 가치 | 널 | 주파수 | 기본_주파수
--------+------------+-------+------------+---
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%). 기본 빈도는 다중 열 사설 토토 사이트가 없는 것처럼 열별 사설 토토 사이트에서 계산된 빈도입니다. 두 열 중 하나에 null 값이 있으면 이는널열.
선택성을 추정할 때 플래너는 다음 항목에 대한 모든 조건을 적용합니다.MCV목록을 작성한 다음 일치하는 항목의 빈도를 합산합니다. 참조mcv_clauselist_selectivity에src/backend/statistics/mcv.c자세한 내용은.
기능적 종속성과 비교하여,MCV목록에는 두 가지 주요 장점이 있습니다. 첫째, 목록에는 실제 값이 저장되어 어떤 조합이 호환되는지 결정할 수 있습니다.
설명(분석, 타이밍 꺼짐) SELECT * FROM t WHERE a = 1 AND b = 10;
쿼리 계획
---------------------------------------------------------------
t에 대한 Seq 스캔(비용=0.00..195.00행=1너비=8)(실제 행=0루프=1)
필터: ((a = 1) AND (b = 10))
필터에 의해 제거된 행: 10000
둘째,MCV목록은 기능적 종속성과 같은 동등 절뿐만 아니라 더 넓은 범위의 절 유형을 처리합니다. 예를 들어 동일한 테이블에 대해 다음 범위 쿼리를 고려해 보세요.
설명(분석, 타이밍 꺼짐) SELECT * FROM t WHERE a <= 49 AND b 49;
쿼리 계획
---------------------------------------------------------------
t에 대한 Seq 스캔(비용=0.00..195.00행=1너비=8)(실제 행=0루프=1)
필터: ((a <= 49) AND (b 49))
필터에 의해 제거된 행: 10000
문서에 올바르지 않은 내용이 있으면 일치하지 않습니다. 특정 기능에 대한 경험이 있거나 추가 설명이 필요한 경우 이용해주세요이 양식문서 문제를 보고합니다.