PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Controlla gli obiettivi delle statistiche in PostgreSQL

L'impostazione per la destinazione delle statistiche è memorizzata per colonna nella tabella del catalogo pg_attribute . Puoi impostarlo in questo modo:

ALTER TABLE myschama.mytable ALTER mycolumn SET STATISTICS 127;

E controlla in questo modo:

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

Oppure guardi lo script di creazione nel browser degli oggetti di pgAdmin, dove viene aggiunto se il valore è distinto dal valore predefinito in default_statistics_target .

Cito il manuale su attstattarget :

attstattarget controlla il livello di dettaglio delle statistiche accumulate per questa colonna da ANALYZE . Un valore zero indica che non devono essere raccolte statistiche. Un valore negativo indica di utilizzare il target delle statistiche predefinite del sistema. Il significato esatto dei valori positivi dipende dal tipo di dati. Per i tipi di dati scalari, attstattarget è sia il numero di destinazione dei "valori più comuni" da raccogliere, sia il numero di destinazione dei bin dell'istogramma da creare.

Grassetto enfasi mia.

Le statistiche per le colonne dell'indice semplice sono identiche alle statistiche delle colonne e non hanno voci separate nelle tabelle delle statistiche. Ma Postgres raccoglie statistiche separate per le espressioni dell'indice . Questi possono essere modificati in modo simile:

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

In assenza di nomi di colonna effettivi, i numeri ordinali vengono utilizzati per indirizzare le colonne di indice, che corrispondono a pg_attribute.attnum :

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

L'impostazione ha effetto solo sulle statistiche della colonna la prossima volta ANALYZE viene eseguito manualmente o da autovacuum .