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

Indice composto con tre chiavi, cosa succede se eseguo una query saltando quella centrale?

Postgres può utilizzare colonne non iniziali in un indice b-tree, ma in una modalità molto meno efficiente.

Se la prima colonna è molto selettiva (solo poche righe per A ) allora difficilmente noterai una differenza di prestazioni poiché entrambi i metodi di accesso (anche una scansione sequenziale sul set ridotto) sono economici. L'aumento delle prestazioni aumenta con il numero di righe per A .

Per il caso che descrivi ti consiglio di creare l'indice su (A, C, B) o (C, A, B) (assicurati solo che B viene per ultimo) per ottimizzare le prestazioni. In questo modo ottieni le migliori prestazioni per le query su (A, B, C) e su (A, C) allo stesso modo.

A differenza della sequenza di colonne nell'indice, la sequenza di predicati nella query non ha importanza.

Ne abbiamo discusso in dettaglio su dba.SE:

Tieni presente che non importa se guidi con A, C o C, A per il caso in questione:

Ci sono anche altre considerazioni, ma la tua domanda non ha tutti i dettagli rilevanti.