View a markdown version of this page

CREATE STATISTICS - Amazon Aurora DSQL

CREATE STATISTICS

Sintaxe compatível

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

Descrição

CREATE STATISTICS cria um objeto de estatísticas estendidas que rastreia dados sobre a tabela especificada. O objeto de estatísticas será criado no banco de dados atual e será de propriedade do usuário que emitir o comando.

O comando CREATE STATISTICS tem duas formas básicas. A primeira forma permite coletar estatísticas univariadas para uma única expressão, proporcionando benefícios semelhantes aos de um índice de expressão, sem a sobrecarga da manutenção de índices. Essa forma não permite especificar o tipo de estatística, pois os vários tipos de estatística se referem somente a estatísticas multivariadas. A segunda forma do comando permite coletar estatísticas multivariadas em várias colunas e/ou expressões, especificando opcionalmente quais tipos de estatística devem ser incluídos. Essa forma também fará com que estatísticas univariadas sejam coletadas automaticamente em todas as expressões incluídas na lista.

Se um nome de esquema for fornecido (por exemplo, CREATE STATISTICS myschema.mystat ...), o objeto de estatísticas será criado no esquema especificado. Do contrário, a visualização será criada no esquema atual. Se fornecido, o nome do objeto de estatísticas deverá ser diferente do nome de qualquer outro objeto de estatísticas no mesmo esquema.

Parâmetros

IF NOT EXISTS

Não gere um erro se já existir um objeto de estatísticas com o mesmo nome. Um aviso é emitido nesse caso. Observe que somente o nome do objeto de estatísticas é considerado aqui, não os detalhes de sua definição. O nome da estatística é obrigatório quando IF NOT EXISTS é especificado.

statistics_name

O nome, opcionalmente qualificado pelo esquema, do objeto de estatísticas a ser criado. Se o nome for omitido, o Aurora DSQL escolherá um nome apropriado com base no nome da tabela pai e nos nomes das colunas e/ou expressões definidos.

statistics_kind

Um tipo de estatística multivariada a ser calculada nesse objeto de estatísticas. Atualmente, há suporte para ndistinct, que habilita estatísticas de n-distinct; dependencies, que habilita estatísticas de dependência funcional; e mcv, que habilita listas de valores mais comuns. Se essa cláusula for omitida, todos os tipos de estatística compatíveis serão incluídos no objeto de estatísticas. As estatísticas de expressão univariadas são criadas automaticamente se a definição das estatísticas incluir expressões complexas, em vez de apenas referências simples a colunas.

column_name

O nome de uma coluna da tabela a ser abrangida pelas estatísticas calculadas. Isso é permitido somente durante a criação de estatísticas multivariadas. Devem ser especificados pelo menos dois nomes de coluna ou expressões, e a ordem deles não é relevante.

expression

Uma expressão a ser abrangida pelas estatísticas calculadas. Ela pode ser usada para criar estatísticas univariadas em uma única expressão ou como parte de uma lista de vários nomes de coluna e/ou expressões para criar estatísticas multivariadas. Neste último caso, estatísticas univariadas separadas são criadas automaticamente para cada expressão da lista.

table_name

O nome (opcionalmente qualificado pelo esquema) da tabela que contém as colunas nas quais as estatísticas são calculadas.

Observações

Você deve ser o proprietário de uma tabela para criar um objeto de estatísticas que a leia. No entanto, depois de criado, o proprietário do objeto de estatísticas é independente das tabelas subjacentes.

As estatísticas de expressão são específicas de cada expressão e são semelhantes à criação de um índice na expressão, exceto pelo fato de evitarem a sobrecarga da manutenção de índices. As estatísticas de expressão são criadas automaticamente para cada expressão na definição do objeto de estatísticas.

As estatísticas estendidas ainda não são usadas pelo planejador para estimativas de seletividade feitas para junções de tabelas.

No Aurora DSQL, você pode criar no máximo cinco objetos de estatísticas estendidas em uma única tabela. Se você exceder esse limite, o Aurora DSQL retornará o erro more than 5 extended statistics per table are not allowed. Para obter mais informações, consulte Limites de banco de dados no Aurora DSQL.

Exemplos

Crie a tabela t1 com duas colunas funcionalmente dependentes, ou seja, conhecer um valor na primeira coluna é suficiente para determinar o valor na outra coluna. Em seguida, as estatísticas de dependência funcional são criadas nessas colunas:

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);

Sem estatísticas de dependência funcional, o planejador presumiria que as duas condições WHERE são independentes e multiplicaria suas seletividades para chegar a uma estimativa de contagem de linhas muito pequena. Com essas estatísticas, o planejador reconhece que as condições WHERE são redundantes e não subestima a contagem de linhas.

Crie a tabela t2 com duas colunas perfeitamente correlacionadas (contendo dados idênticos) e uma lista MCV nessas colunas:

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);

A lista MCV fornece ao planejador informações mais detalhadas sobre os valores específicos que aparecem com frequência na tabela, bem como um limite superior para as seletividades de combinações de valores que não aparecem na tabela, permitindo que ele gere estimativas melhores em ambos os casos.