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

Più indici rispetto a un singolo indice su più colonne in postgresql

Indipendentemente da quanti indici hai creato in relazione, solo uno di essi verrà utilizzato in una determinata query (quale dipende dalla query, dalle statistiche, ecc.). Quindi nel tuo caso non otterresti un vantaggio cumulativo dalla creazione di due indici a colonna singola. Per ottenere il massimo delle prestazioni dall'indice, suggerirei di utilizzare l'indice composito su (posizione, timestamp).

Nota che query come ... WHERE timestamp BETWEEN smth AND smth non utilizzerà l'indice sopra durante query come ... WHERE location = 'smth' o ... WHERE location = 'smth' AND timestamp BETWEEN smth AND smth volere. È perché il primo attributo nell'indice è fondamentale per la ricerca e l'ordinamento.

Non dimenticare di esibirti

ANALYZE;

dopo la creazione dell'indice per raccogliere statistiche.

Aggiornamento: Come @MondKin menzionato nei commenti, alcune query possono effettivamente utilizzare più indici sulla stessa relazione. Ad esempio, interroga con OR clausole come a = 123 OR b = 456 (supponendo che ci siano indici per entrambe le colonne). In questo caso, Postgres eseguirà scansioni dell'indice bitmap per entrambi gli indici, creerà un'unione di bitmap risultanti e la utilizzerà per la scansione dell'heap bitmap. In determinate condizioni lo stesso schema può essere utilizzato per AND query ma al posto dell'unione ci sarebbe un'intersezione.