Colonne utilizzate per il filtro o partecipare (o, in misura minore, ordinamento ) sono di interesse per l'indicizzazione. Le colonne appena selezionate sono poco rilevanti! Per la query seguente vengono indicizzati solo su a e e può essere utile:
SELECT a,b,c,d
FROM tbl_a
WHERE a = $some_value
AND e < $other_value;
Ecco, f ed eventualmente c sono candidati anche loro:
SELECT a,b,c,d
FROM tbl_a
JOIN tbl_b USING (f)
WHERE a = $some_value
AND e < $other_value
ORDER BY c;
Dopo aver creato gli indici, verifica se sono effettivamente utili con EXPLAIN ANALYZE
. Confronta anche i tempi di esecuzione con e senza gli indici. Eliminare e ricreare gli indici è facile e veloce. Ci sono anche parametri per esperimento
con EXPLAIN ANALYZE
. La differenza potrebbe essere sbalorditiva o inesistente.
Poiché le tabelle sono di sola lettura, la manutenzione dell'indice è economica. È solo una questione di spazio su disco.
Se vuoi davvero sapere cosa stai facendo, inizia leggendo i documenti .
Se non sai quali query aspettarti...
-
Prova a registrare un numero sufficiente di query per trovare casi d'uso tipici. Registra le query con il parametro
log_statement = all
per quello. Oppure registra semplicemente query lente utilizzandolog_min_duration_statement
. -
Crea indici potrebbe essere utile e controllare le statistiche dopo un po' di tempo per vedere cosa viene effettivamente utilizzato. PostgreSQL dispone di un'intera infrastruttura per monitoraggio delle statistiche . Un modo conveniente per studiare le statistiche (e molte altre attività) è pgAdmin dove puoi scegliere la tua tabella / funzione / indice e ottenere tutti i dati nella scheda "statistiche" nel browser degli oggetti (finestra principale).
-
Procedi come descritto sopra per vedere se gli indici in uso accelerano effettivamente le cose.
-
Se il pianificatore di query dovesse scegliere di utilizzare uno o più dei tuoi indici ma senza o con effetti negativi, probabilmente c'è qualcosa che non va nella tua configurazione e devi studiare le basi dell'ottimizzazione delle prestazioni:vuoto, analisi, parametri di costo, utilizzo della memoria, ...