Se il pianificatore di query prende decisioni sbagliate, è principalmente una delle due cose:
1. Le statistiche sono imprecisi.
Esegui ANALYZE
abbastanza? Popolare anche nella sua forma combinata VACUUM ANALYZE
. Se l'autovacuum è attivo (che è l'impostazione predefinita nel Postgres moderno), ANALYZE
viene eseguito automaticamente. Ma considera:
- Le normali ANALISI DEL VUOTO sono ancora consigliate sotto 9.1?
Se il tuo tavolo è grande e la distribuzione dei dati è irregolare , aumentando il default_statistics_target
posso aiutare. O meglio, imposta semplicemente il target delle statistiche per le colonne pertinenti (quelle in WHERE
o JOIN
clausole delle tue domande, in pratica):
ALTER TABLE ... ALTER COLUMN ... SET STATISTICS 400; -- calibrate number
Il target può essere impostato nell'intervallo da 0 a 10000;
Esegui ANALYZE
di nuovo dopo (sulle tabelle pertinenti).
2. Le impostazioni dei costi per il pianificatore i preventivi sono disattivati.
Leggere il capitolo Costanti di costo del pianificatore nel manuale.
Guarda i capitoli default_statistics_target e costo_pagina_casuale su questa pagina Wiki di PostgreSQL generalmente utile.
Ci sono molte altre possibili ragioni, ma queste sono di gran lunga le più comuni.