Ho una tabella con un indice a più colonne e ho dei dubbi sul corretto ordinamento degli indici per ottenere le massime prestazioni dalle query.
Lo scenario:
PostgreSQL 8.4, tabella con circa un milione di righe
I valori nella colonna c1 possono avere circa 100 valori diversi . Possiamo presumere che i valori siano distribuiti uniformemente, quindi abbiamo circa 10000 righe per ogni possibile valore.
La colonna c2 può avere 1000 valori diversi . Abbiamo 1000 righe per ogni possibile valore.
Durante la ricerca dei dati, la condizione include sempre i valori per queste due colonne, quindi la tabella ha un indice a più colonne che combina c1 e c2. Ho letto dell'importanza di ordinare correttamente le colonne in un indice a più colonne se hai domande che usano solo una colonna per filtrare. Questo non è il caso nel nostro scenario.
La mia domanda è questa:
Dato che uno dei filtri seleziona un set di dati molto più piccolo, potrei migliorare le prestazioni se il primo indice è il più selettivo (quello che consente un set più piccolo)? Non avevo mai preso in considerazione questa domanda fino a quando non ho visto la grafica dell'articolo di riferimento:
Immagine tratta dall'articolo di riferimento sugli indici a più colonne .
Le query utilizzano i valori delle due colonne per il filtraggio. Non ho domande usando solo una colonna per filtrare. Tutti loro sono: WHERE c1=@ParameterA AND c2=@ParameterB
. Ci sono anche condizioni come questa:WHERE c1 = "abc" AND c2 LIKE "ab%"