CREATE STATISTICS — définit des statistiques étendues
CREATE STATISTICS [ IF NOT EXISTS ] nom_statistiques [ ( type_statistique [, ... ] ) ] ON nom_colonne, nom_colonne [, ...] FROM nom_table
CREATE STATISTICS créera un nouvel objet de suivi des statistiques étendues sur les données de la table, table distante ou vue matérialisée spécifiée. L'objet statistiques sera créé dans la base de données courante et son propriétaire sera l'utilisateur exécutant la commande.
Si un nom de schéma est donné (par exemple, CREATE STATISTICS monschema.mastat ...) alors l'objet statistiques est crée dans le schéma spécifié. Autrement, il sera crée dans le schéma courant. Le nom de l'objet statistiques doit être différent du nom de tous les autres objets statistiques dans le même schéma.
Ne renvoie pas d'erreur si un objet statistiques de même nom existe déjà. Une note est affichée dans ce cas. Veuiller noter que seul le nom de l'objet statistiques est pris en compte ici, et non pas le détail de sa définition.
Le nom (éventuellement qualifié du nom du schéma) de l'objet statistiques devant être crée.
Un type de statistique devant être calculé dans cet objet statistiques. Les types actuellement supportés sont ndistinct, qui active des statistiques n-distinct, et dependency qui active des statistiques de dépendances fonctionnelles. Si cette clause est omise, tous les types statistiques supportés sont inclus dans l'objet statistique. Pour plus d'informations, voir Section 14.2.2, « Statistiques étendues » et Section 68.2, « Exemples de statistiques multivariées ».
Le nom d'une colonne de la table devant être couverte par les statistiques calculées. Au moins deux noms de colonnes doivent être fournis.
Le nom (éventuellement qualifié du nom du schéma) de la table contenant le(s) colonne(s) sur lesquelles les statistiques sont calculées.
Vous devez être le propriétaire de la table pour créer un objet statistiques lisant ses données. Une fois celui-ci créé le propriétaire de l'objet statistiques est indépendant de la ou les tables sous-jacentes.
Créer une table t1 avec deux colonnes fonctionnellement dépendantes, c'est-à-dire que la connaissance de la valeur de la première colonne est suffisante pour déterminer la valeur de l'autre colonne. Ensuite des statistiques de dépendances fonctionnelles sont construites sur 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; -- le nombre de lignes correspodantes sera drastiquement sous-estimé : EXPLAIN ANALYZE SELECT * FROM t1 WHERE (a = 1) AND (b = 0); CREATE STATISTICS s1 (dependencies) ON a, b FROM t1; ANALYZE t1; -- à présent le nombre de ligne estimé est plus précis : EXPLAIN ANALYZE SELECT * FROM t1 WHERE (a = 1) AND (b = 0);
Sans statistiques fonctionnellement dépendantes, l'optimisateur supposera que les deux conditions WHERE sont indépendantes, et multiplierait leurs sélectivités pour arriver à une estimation du nombre de lignes bien trop basse. Avec de telles statistiques, l'optimiseur reconnaît que les conditions WHERE sont redondantes et ne sous-estime plus le nombre de lignes.