CREATE STATISTICS — 새 확장된 통계 정보 정의
CREATE STATISTICS [ IF NOT EXISTS ]통계이름
[ (통계종류
[, ... ] ) ] ON칼럼이름
,칼럼이름
[, ...] FROM테이블이름
CREATE STATISTICS
명령은
지정한 테이블, 외부 테이블, 구체화한 뷰를 대상으로
새로운 통계 정보를 만든다. 해당 통계 정보의 소유주는
이 명령을 실행하는 사용자가 된다.
통계 정보 이름에 스키마 이름을 포함하면(예,
CREATE STATISTICS
myschema.mystat ...
) 해당 스키마 안에 만든다.
스키마 이름이 없으면, 현재 스키마 안에 만든다.
통계 정보 이름은 같은 스키마 내에서는 유일해야 한다.
IF NOT EXISTS
이미 같은 이름의 통계 정보가 있으면 알림 메시지만 보이고, 무시한다. 같은 이름이 있는지만 확인하기 때문에, 정확히 같은 통계인지는 확인하지 않는다.
통계이름
만들 사용자 정의 통계 정보 이름(스키마 이름 포함).
통계종류
이 통계 정보 개체의 통계 종류.
현재, n-distinct 통계용 ndistinct
,
기능적 의존성 통계용 dependencies
두 종류를 지원한다.
이 옵션을 생략하면, 만들어지는 통계 정보에,
두 종류 모든 통계를 보관한다.
14.2.2절,
70.2절에서 이 부분에
대한 자세한 내용을 다룬다.
칼럼이름
통계 정보를 수집할 칼럼 이름. 최소 두 개 이상 지정해야 한다.
테이블이름
통계 정보를 수집할 해당 테이블 이름(스키마 이름 포함).
사용자 정의 통계를 만드려면, 해당 테이블의 소유주여야 한다. 한 번 만들어진 통계는 해당 테이블에 종속되어 소유주는 테이블의 소유주에 따라 자동으로 바뀐다.
t1
테이블에는 두 개의 칼럼이 있는데,
이 칼럼은 기능적으로 서로 의존적이다. 아래의 경우는
첫번째 칼럼이 100단위, 두번째 칼럼이 500단위다.
CREATE TABLE t1 ( a int, b int ); INSERT INTO t1 SELECT i/100, i/500 FROM generate_series(1,1000000) s(i); ANALYZE t1; -- 실행 계획은 실 자료보다 적게 해당 자료를 예측한다. EXPLAIN ANALYZE SELECT * FROM t1 WHERE (a = 1) AND (b = 0); CREATE STATISTICS s1 (dependencies) ON a, b FROM t1; ANALYZE t1; -- 보다 정확하게 예측한다. EXPLAIN ANALYZE SELECT * FROM t1 WHERE (a = 1) AND (b = 0);
기능적 의존 관계가 있는 통계 정보를 사용하지 않으면,
실행 계획기는,
WHERE
조건이 두 개인 경우, 각 예측 값의 AND 연산를
해서 실 자료보다 훨씬 적은 예측값을 사용하게 된다.
이런 사용자 정의 통계 정보를 만들면,
WHERE
조건절에 다중 칼럼을 사용하는 경우,
보다 정확한 예측을 할 수 있도록 한다.
CREATE STATISTICS
명령은 SQL 표준이 아니다.