CREATE STATISTICS
Sintaxis admitida
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
Descripción
CREATE STATISTICS creará un nuevo objeto de estadísticas extendidas que rastreará los datos sobre la tabla especificada. El objeto de estadísticas se creará en la base de datos actual y será propiedad del usuario que emita el comando.
El comando CREATE STATISTICS tiene dos formas básicas. La primera forma permite recopilar estadísticas univariantes para una sola expresión, lo que proporciona beneficios similares a los de un índice de expresión sin la sobrecarga que supone el mantenimiento del índice. Esta forma no permite especificar el tipo de estadística, ya que los distintos tipos de estadísticas se refieren solo a estadísticas multivariantes. La segunda forma del comando permite recopilar estadísticas multivariantes en varias columnas o expresiones, lo que especifica opcionalmente qué tipos de estadísticas incluir. Esta forma también hará que se recopilen automáticamente estadísticas univariantes sobre cualquier expresión incluida en la lista.
Si se indica un nombre de esquema (por ejemplo, CREATE STATISTICS myschema.mystat
...), el objeto de estadísticas se crea en el esquema especificado. En caso contrario, se crea en el esquema actual. Si se indica, el nombre del objeto de estadísticas debe ser distinto del nombre de cualquier otro objeto de estadísticas en el mismo esquema.
Parameters
IF NOT EXISTS-
No se genera un error si ya existe un objeto de estadísticas con el mismo nombre. En este caso, se emite un aviso. Tenga en cuenta que aquí solo se tiene en cuenta el nombre del objeto de estadísticas, no los detalles de su definición. El nombre de las estadísticas es obligatorio cuando se especifica
IF NOT EXISTS. statistics_name-
El nombre (opcionalmente calificado por el esquema) del objeto de estadísticas que se va a crear. Si se omite el nombre, Aurora DSQL elige un nombre adecuado en función del nombre de la tabla principal y de los nombres de las columnas o expresiones definidas.
statistics_kind-
Un tipo de estadística multivariante que se calculará en este objeto de estadísticas. Los tipos admitidos actualmente son
ndistinct, que permite estadísticas n-distinct,dependencies, que permite estadísticas de dependencia funcional, ymcv, que permite listas de valores más comunes. Si se omite esta cláusula, todos los tipos de estadísticas admitidos se incluyen en el objeto de estadísticas. Las estadísticas de expresiones univariantes se generan automáticamente si la definición de estadísticas incluye expresiones complejas en lugar de simples referencias a columnas. column_name-
El nombre de la columna de la tabla que deben cubrir las estadísticas calculadas. Esto solo está permitido cuando se crean estadísticas multivariantes. Se deben especificar al menos dos nombres de columnas o expresiones, y su orden no es significativo.
expresión-
Una expresión que deben cubrir las estadísticas calculadas. Se puede utilizar para crear estadísticas univariantes a partir de una sola expresión o como parte de una lista de varios nombres de columnas o expresiones para crear estadísticas multivariantes. En este último caso, se crean automáticamente estadísticas univariantes independientes para cada expresión de la lista.
table_name-
El nombre (opcionalmente cualificado por el esquema) de la tabla que contiene las columnas en las que se calculan las estadísticas.
Notas
Debe ser el propietario de una tabla para crear un objeto de estadísticas que la lea. Sin embargo, una vez creado, la propiedad del objeto de estadísticas es independiente de las tablas subyacentes.
Las estadísticas de las expresiones se realizan por expresión y son similares a la creación de un índice en la expresión, con la salvedad de que evitan la sobrecarga que supone el mantenimiento del índice. Las estadísticas de expresión se crean automáticamente para cada expresión de la definición del objeto de estadísticas.
El planificador no utiliza actualmente las estadísticas extendidas para las estimaciones de selectividad realizadas para las uniones de tablas.
En Aurora DSQL, puede crear como máximo 5 objetos de estadísticas extendidas en una sola tabla. Si supera este límite, Aurora DSQL devuelve el error more than 5 extended statistics per table
are not allowed. Para obtener más información, consulte Límites de base de datos en Aurora DSQL.
Ejemplos
Cree una tabla t1 con dos columnas dependientes desde el punto de vista funcional, es decir, basta con conocer un valor de la primera columna para determinar el valor de la otra columna. Luego, las estadísticas de dependencia funcional se basan en esas columnas:
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);
Sin las estadísticas de dependencia funcional, el planificador asumiría que las dos condiciones WHERE son independientes y multiplicaría sus selectividades para obtener una estimación del recuento de filas demasiado pequeña. Con estas estadísticas, el planificador reconoce que las condiciones WHERE son redundantes y no subestima el recuento de filas.
Cree una tabla t2 con dos columnas perfectamente correlacionadas (que contengan datos idénticos) y una lista de MCV en esas columnas:
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);
La lista de MCV proporciona al planificador información más detallada sobre los valores específicos que suelen aparecer en la tabla, así como un límite superior sobre las selectividades de las combinaciones de valores que no aparecen en la tabla, lo que permite generar mejores estimaciones en ambos casos.