Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
CREATE STATISTICS
Syntaxe prise en charge
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
Description
CREATE STATISTICScréera de nouvelles données de suivi des objets statistiques étendues concernant la table spécifiée. L'objet de statistiques sera créé dans la base de données actuelle et appartiendra à l'utilisateur qui émet la commande.
La CREATE STATISTICS commande se présente sous deux formes de base. La première forme permet de collecter des statistiques univariées pour une seule expression, offrant des avantages similaires à ceux d'un index d'expression sans les frais liés à la maintenance de l'index. Ce formulaire ne permet pas de spécifier le type de statistiques, car les différents types de statistiques se réfèrent uniquement à des statistiques multivariées. La deuxième forme de la commande permet de collecter des statistiques multivariées sur des and/or expressions à colonnes multiples, en spécifiant éventuellement les types de statistiques à inclure. Ce formulaire entraînera également la collecte automatique de statistiques univariées sur toutes les expressions incluses dans la liste.
Si un nom de schéma est donné (par exempleCREATE STATISTICS myschema.mystat
...), l'objet de statistiques est créé dans le schéma spécifié. Dans le cas contraire, il est créé dans le schéma actuel. S'il est indiqué, le nom de l'objet de statistiques doit être distinct du nom de tout autre objet de statistiques du même schéma.
Parameters
IF NOT EXISTS-
Ne génère pas d'erreur s'il existe déjà un objet de statistiques portant le même nom. Un avis est émis dans ce cas. Notez que seul le nom de l'objet de statistiques est pris en compte ici, et non les détails de sa définition. Le nom de la statistique est obligatoire lorsqu'
IF NOT EXISTSil est spécifié. statistics_name-
Le nom (éventuellement qualifié de schéma) de l'objet de statistiques à créer. Si le nom est omis, Aurora DSQL choisit un nom approprié en fonction du nom de la table parent et des and/or expressions de nom de colonne définies.
statistics_kind-
Type de statistiques multivariées à calculer dans cet objet de statistiques. Les types actuellement pris en charge sont les
ndistinctsuivants : qui permet n statistiques distinctesdependencies, qui active les statistiques de dépendance fonctionnelle etmcvqui active les listes de valeurs les plus courantes. Si cette clause est omise, tous les types de statistiques pris en charge sont inclus dans l'objet de statistiques. Les statistiques d'expressions univariées sont créées automatiquement si la définition des statistiques inclut des expressions complexes plutôt que de simples références de colonnes. column_name-
Le nom d'une colonne de table à couvrir par les statistiques calculées. Cela n'est autorisé que lors de la création de statistiques multivariées. Au moins deux noms de colonnes ou expressions doivent être spécifiés, et leur ordre n'est pas significatif.
expression-
Expression à couvrir par les statistiques calculées. Cela peut être utilisé pour créer des statistiques univariées sur une seule expression, ou dans le cadre d'une liste d' and/or expressions de noms de colonnes multiples pour créer des statistiques multivariées. Dans ce dernier cas, des statistiques univariées distinctes sont créées automatiquement pour chaque expression de la liste.
table_name-
Le nom (éventuellement qualifié de schéma) de la table contenant la ou les colonnes sur lesquelles les statistiques sont calculées.
Remarques
Vous devez être le propriétaire d'une table pour créer un objet de statistiques qui la lit. Cependant, une fois créé, la propriété de l'objet de statistiques est indépendante de la ou des tables sous-jacentes.
Les statistiques d'expression sont définies par expression et sont similaires à la création d'un index sur l'expression, sauf qu'elles permettent d'éviter les frais liés à la maintenance de l'index. Les statistiques d'expression sont créées automatiquement pour chaque expression de la définition de l'objet de statistiques.
Les statistiques étendues ne sont actuellement pas utilisées par le planificateur pour les estimations de sélectivité effectuées pour les jointures de tables.
Dans Aurora DSQL, vous pouvez créer au maximum 5 objets statistiques étendus sur une seule table. Si vous dépassez cette limite, Aurora DSQL renvoie l'erreurmore than 5 extended statistics per table
are not allowed. Pour de plus amples informations, veuillez consulter Limites de base de données dans Aurora DSQL.
Exemples
Créez une table t1 avec deux colonnes dépendantes du point de vue fonctionnel, c'est-à-dire que la connaissance d'une valeur dans la première colonne est suffisante pour déterminer la valeur de l'autre colonne. Les statistiques de dépendance fonctionnelle sont ensuite construites à partir de ces colonnes :
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);
Sans statistiques de dépendance fonctionnelle, le planificateur supposerait que les deux WHERE conditions sont indépendantes et multiplierait leurs sélectivités pour arriver à une estimation du nombre de lignes beaucoup trop petite. Avec de telles statistiques, le planificateur reconnaît que les WHERE conditions sont redondantes et ne sous-estime pas le nombre de lignes.
Créez un tableau t2 avec deux colonnes parfaitement corrélées (contenant des données identiques) et une liste MCV sur ces colonnes :
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 liste MCV fournit au planificateur des informations plus détaillées sur les valeurs spécifiques qui apparaissent couramment dans le tableau, ainsi qu'une limite supérieure sur les sélectivités des combinaisons de valeurs qui n'apparaissent pas dans le tableau, ce qui lui permet de générer de meilleures estimations dans les deux cas.