pg_statistic
Le catalogue pg_statistic
stocke des données
statistiques sur le contenu de la base de données. Les entrées sont créées
par ANALYZE, puis
utilisées par le planificateur de requêtes.
Les données statistiques sont, par définition des approximations,
même si elles sont à jour.
D'habitude, il existe une entrée, avec
stainherit
= false
, pour
chaque colonne de table qui a été analysée. Si la table a des enfants, une
seconde entrée avec stainherit
=
true
est aussi créé. Cette ligne représente les
statistiques de la colonne sur l'arbre d'héritage, autrement dit les
statistiques pour les données que vous voyez avec
SELECT
, alors que la ligne
colonne
FROM
table
*stainherit
= false
représente
le résultat de
SELECT
.
column
FROM ONLY table
pg_statistic
stocke aussi les données
statistiques des valeurs des expressions d'index. Elles sont décrites
comme si elles étaient de vraies colonnes ; en particulier,
starelid
référence l'index. Néanmoins, aucune
entrée n'est effectuée pour une colonne d'index ordinaire sans expression
car cela est redondant avec l'entrée correspondant à la colonne sous-jacente de la
table. Actuellement, les entrées pour les expressions d'index ont toujours
stainherit
= false
.
Comme des statistiques différentes peuvent être appropriées pour des types de
données différents, pg_statistic
ne fait
qu'un minimum de suppositions sur les types de statistiques qu'il
stocke. Seules des statistiques extrêmement générales (comme les valeurs
NULL) ont des colonnes dédiées. Tout le reste est stocké dans des
« connecteurs », groupes de colonnes associées
dont le contenu est identifié par un numéro de code dans l'une des colonnes
du connecteur. Pour plus d'information, voir
src/include/catalog/pg_statistic.h
.
pg_statistic
ne doit pas être lisible par le
public,
car même les données statistiques sont sensibles.
(Exemple : les valeurs maximales et minimales d'une colonne de salaire
peuvent être intéressantes).
pg_stats
est
une vue sur pg_statistic
accessible à tous, qui
n'expose que les informations sur les tables accessibles à
l'utilisateur courant.
Tableau 52.50. Colonnes de pg_statistic
Nom | Type | Références | Description |
---|---|---|---|
starelid | oid |
| Table ou index à qui la colonne décrite appartient |
staattnum | int2 |
| Numéro de la colonne décrite |
stainherit | bool | Si vrai, les statistiques incluent les colonnes enfants de l'héritage, pas uniquement les valeurs de la relation spécifiée | |
stanullfrac | float4 | Fraction des entrées de la colonne qui ont une valeur NULL | |
stawidth | int4 | Taille moyenne, en octets, des entrées non NULL | |
stadistinct | float4 |
Nombre de valeurs distinctes non NULL dans la colonne. Une
valeurs positive est le nombre réel de valeurs distinctes. Une valeur
négative est le négatif d'un multiplieur pour le nombre de lignes dans
la table ;
par exemple, une colonne dans laquelle 90% des lignes ne sont pas NULL
et dans laquelle chaque valeur non NULL apparaît deux fois en moyenne,
pourrait être représentée avec un
stadistinct à -0,4.
| |
stakind | int2 |
Numéro de code indiquant le type de statistiques stockées dans
« le connecteur » numéro N de la ligne de
pg_statistic .
| |
staop | oid |
|
Opérateur utilisé pour dériver les statistiques stockées dans
« le connecteur » numéro N . Par exemple, un
connecteur d'histogramme montre l'opérateur < ,
qui définit l'ordre de tri des données.
|
stanumbers | float4[] |
Statistiques numériques du type approprié pour
« le connecteur » numéro N ou NULL si le type
de connecteur n'implique pas de valeurs numériques.
| |
stavalues | anyarray |
Valeurs de données de la colonne du type approprié pour
« le connecteur » numéro N ou NULL si
le type de connecteur ne stocke aucune valeur de données. Chaque valeur
d'élément du tableau est en fait du type de données de la colonne
indiquée, ou un type en relation comme un type élément d'un tableau, si
bien qu'il n'y a aucun moyen de définir le type de ces colonnes
plus précisément qu'avec le type anyarray (tableau quelconque).
|