PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Überprüfen Sie Statistikziele in PostgreSQL

Die Einstellung für das Statistikziel wird pro Spalte in der Katalogtabelle pg_attribute gespeichert . Sie können es wie folgt einstellen:

ALTER TABLE myschama.mytable ALTER mycolumn SET STATISTICS 127;

Und überprüfen Sie es wie folgt:

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

Oder Sie schauen sich einfach das Erstellungsskript im Objektbrowser von pgAdmin an, wo es angehängt wird, wenn sich der Wert von der Vorgabe in default_statistics_target unterscheidet .

Ich zitiere das Handbuch zu attstattarget :

attstattarget steuert den Detaillierungsgrad der Statistiken, die für diese Spalte von ANALYZE gesammelt werden . Ein Nullwert gibt an, dass keine Statistiken erfasst werden sollen. Ein negativer Wert sagt aus, dass das Standardstatistikziel des Systems verwendet werden soll. Die genaue Bedeutung positiver Werte ist datentypabhängig. Bei skalaren Datentypen ist attstattarget sowohl die Zielanzahl der zu erfassenden „häufigsten Werte“ als auch die Zielanzahl der zu erstellenden Histogramm-Bins.

Fett Hervorhebung von mir.

Statistiken für einfache Indexspalten sind identisch mit Spaltenstatistiken und haben keine separaten Einträge in Statistiktabellen. Aber Postgres sammelt separate Statistiken für Index-Ausdrücke . Diese können auf ähnliche Weise angepasst werden:

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

In Ermangelung tatsächlicher Spaltennamen werden Ordnungszahlen verwendet, um Indexspalten zu adressieren, die pg_attribute.attnum entsprechen :

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

Die Einstellung wirkt sich tatsächlich nur beim nächsten ANALYZE auf die Spaltenstatistik aus wird manuell oder durch autovacuum ausgeführt .