PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Vérifier les cibles de statistiques dans PostgreSQL

Le paramètre pour la cible des statistiques est stocké par colonne dans la table de catalogue pg_attribute . Vous pouvez le définir comme ceci :

ALTER TABLE myschama.mytable ALTER mycolumn SET STATISTICS 127;

Et vérifiez comme ceci :

SELECT attstattarget
FROM   pg_attribute
WHERE  attrelid = 'myschama.mytable'::regclass
AND    attname = 'mycolumn';

Ou vous regardez simplement le script de création dans le navigateur d'objets de pgAdmin, où il est ajouté si la valeur est distincte de la valeur par défaut dans default_statistics_target .

Je cite le manuel sur attstattarget :

attstattarget contrôle le niveau de détail des statistiques accumulées pour cette colonne par ANALYZE . Une valeur nulle indique qu'aucune statistique ne doit être collectée. Une valeur négative indique d'utiliser la cible de statistiques par défaut du système. La signification exacte des valeurs positives dépend du type de données. Pour les types de données scalaires, attstattarget est à la fois le nombre cible de "valeurs les plus courantes" à collecter et le nombre cible de groupes d'histogrammes à créer.

Gras c'est moi qui souligne.

Les statistiques des colonnes d'index simple sont identiques aux statistiques de colonne et n'ont pas d'entrées distinctes dans les tables de statistiques. Mais Postgres rassemble des statistiques distinctes pour les expressions d'index . Ceux-ci peuvent être modifiés de la même manière :

ALTER INDEX myschema.myidx ALTER COLUMN 1 SET STATISTICS 128;

En l'absence de noms de colonnes réels, des nombres ordinaux sont utilisés pour adresser les colonnes d'index, qui correspondent à pg_attribute.attnum :

SELECT attstattarget
FROM   pg_attribute
WHERE  attrelid = 'myschama.myidx'::regclass
AND    attnum = 1;

Le paramètre n'affecte réellement les statistiques de colonne que la prochaine fois ANALYZE est exécuté manuellement ou par autovacuum .