View a markdown version of this page

CREATE STATISTICS - Amazon Aurora DSQL

CREATE STATISTICS

지원되는 구문

CREATE STATISTICS [ [ IF NOT EXISTS ] statistics_name ] ON ( expression ) FROM table_name CREATE STATISTICS [ [ IF NOT EXISTS ] statistics_name ] [ ( statistics_kind [, ... ] ) ] ON { column_name | ( expression ) }, { column_name | ( expression ) } [, ...] FROM table_name

설명

CREATE STATISTICS는 지정된 테이블에 대한 데이터를 추적하는 새로운 확장 통계 객체를 생성합니다. 통계 객체는 현재 데이터베이스에 생성되며 명령을 실행하는 사용자가 소유합니다.

CREATE STATISTICS 명령에는 두 가지 기본 양식이 있습니다. 첫 번째 양식을 사용하면 단일 표현식에 대한 단변량 통계를 수집할 수 있으므로 인덱스 유지 관리 오버헤드 없이 표현식 인덱스와 유사한 이점을 얻을 수 있습니다. 이 양식에서는 통계 유형을 지정할 수 없습니다. 왜냐하면 다양한 통계 유형은 다변량 통계만을 나타내기 때문입니다. 명령의 두 번째 양식을 사용하면 여러 열 및/또는 표현식에 대한 다변량 통계를 수집할 수 있으며 선택적으로 포함할 통계 종류를 지정할 수 있습니다. 또한 이 양식을 사용하면 목록에 포함된 모든 표현식에 대한 단변량 통계가 자동으로 수집됩니다.

스키마 이름이 지정된 경우(예: CREATE STATISTICS myschema.mystat ...), 통계 객체는 지정된 스키마에서 생성됩니다. 그러지 않으면 현재 스키마에서 생성됩니다. 통계 객체의 이름이 주어지는 경우 해당 이름은 동일한 스키마 내의 다른 통계 객체의 이름과 달라야 합니다.

파라미터

IF NOT EXISTS

동일한 이름을 가진 통계 객체가 이미 존재하는 경우 오류를 발생시키지 마십시오. 이 경우 알림이 발행됩니다. 여기서는 통계 객체의 이름만 고려하고 정의의 세부 정보는 고려되지 않다는 점에 유의하십시오. IF NOT EXISTS를 지정할 때 통계 이름이 필요합니다.

statistics_name

생성할 통계 객체의 이름(선택적으로 스키마 한정자 포함)입니다. 이름을 생략하면 Aurora DSQL은 상위 테이블의 이름과 정의된 열 이름 및/또는 표현식을 기반으로 적절한 이름을 선택합니다.

statistics_kind

이 통계 객체에서 계산할 다변량 통계 유형입니다. 현재 지원되는 유형은 n개의 서로 다른 통계를 가능하게 하는 ndistinct, 함수 종속성 통계를 가능하게 하는 dependencies, 가장 일반적인 값 목록을 가능하게 하는 mcv입니다. 이 절을 생략하면 지원되는 모든 통계 유형이 통계 객체에 포함됩니다. 단변량 표현식 통계는 통계 정의에 단순한 열 참조가 아닌 복잡한 표현식이 포함된 경우 자동으로 생성됩니다.

column_name

계산된 통계에 포함되는 테이블 열의 이름입니다. 이는 다변량 통계를 작성할 때만 허용됩니다. 두 개 이상의 열 이름 또는 표현식을 지정해야 하며 그 순서는 중요하지 않습니다.

expression

계산된 통계에 포함될 표현식입니다. 이는 단일 표현식에 대한 단변량 통계를 구축하는 데 사용될 수 있으며, 다변량 통계를 구축하기 위해 여러 열 이름 및/또는 표현식 목록의 일부로 사용될 수도 있습니다. 후자의 경우 목록에 있는 각 표현식에 대해 별도의 단변량 통계가 자동으로 생성됩니다.

table_name

통계가 계산되는 열이 포함된 테이블의 이름(선택적으로 스키마 한정자 포함)입니다.

참고

테이블을 읽어 통계 객체를 생성하려면 해당 테이블의 소유자여야 합니다. 그러나 일단 생성되면 통계 객체의 소유권은 기본 테이블과 별개입니다.

표현식 통계는 표현식별로 산출되며 해당 표현식에 인덱스를 생성하는 것과 유사하지만, 인덱스 유지 관리로 인한 오버헤드는 발생하지 않습니다. 표현식 통계는 통계 객체 정의에 있는 각 표현식에 대해 자동으로 생성됩니다.

현재 플래너는 테이블 조인에 대한 선택도 추정에 확장 통계를 사용하지 않습니다.

Aurora DSQL에서는 단일 테이블에 최대 5개의 확장 통계 객체를 생성할 수 있습니다. 이 제한을 초과하면 Aurora DSQL에서 more than 5 extended statistics per table are not allowed 오류를 반환합니다. 자세한 내용은 Aurora DSQL의 데이터베이스 한도 섹션을 참조하세요.

예제

함수적으로 종속적인 두 개의 열이 있는 테이블 t1을 생성합니다. 즉, 첫 번째 열의 값을 알고 있으면 다른 열의 값을 알 수 있습니다. 그런 다음 함수 종속성 통계가 해당 열을 기반으로 작성됩니다.

CREATE TABLE t1 ( a int, b int ); INSERT INTO t1 SELECT i/100, i/500 FROM generate_series(1,1000000) s(i); ANALYZE t1; -- the number of matching rows will be drastically underestimated: EXPLAIN ANALYZE SELECT * FROM t1 WHERE (a = 1) AND (b = 0); CREATE STATISTICS s1 (dependencies) ON a, b FROM t1; ANALYZE t1; -- now the row count estimate is more accurate: EXPLAIN ANALYZE SELECT * FROM t1 WHERE (a = 1) AND (b = 0);

함수 종속성 통계가 없으면 플래너는 두 WHERE 조건이 독립적이라고 가정하고 선택도를 곱하여 실제보다 훨씬 작은 행 수 추정치를 얻게 됩니다. 이러한 통계를 통해 플래너는 WHERE 조건이 중복됨을 인식하고 행 수를 과소평가하지 않습니다.

완벽하게 상관 관계가 있는 두 열(동일한 데이터 포함)로 구성된 테이블 t2와 해당 열을 기반으로 하는 MCV 목록을 생성합니다.

CREATE TABLE t2 ( a int, b int ); INSERT INTO t2 SELECT mod(i,100), mod(i,100) FROM generate_series(1,1000000) s(i); CREATE STATISTICS s2 (mcv) ON a, b FROM t2; ANALYZE t2; -- valid combination (found in MCV) EXPLAIN ANALYZE SELECT * FROM t2 WHERE (a = 1) AND (b = 1); -- invalid combination (not found in MCV) EXPLAIN ANALYZE SELECT * FROM t2 WHERE (a = 1) AND (b = 2);

MCV 목록은 플래너에게 테이블에 자주 나타나는 특정 값에 대한 자세한 정보를 제공할 뿐만 아니라 표에 나타나지 않는 값 조합의 선택도에 대한 상한값을 제공하여 두 경우 모두에서 더 나은 추정치를 생성할 수 있도록 합니다.