Devi capire cosa WHERE
clausole che utilizzerai con questa query, con quale frequenza si verificheranno e quanto sarà selettiva ciascuna condizione.
-
Non indicizzare le query che si verificano di rado a meno che non sia necessario.
-
Usa indici multicolonna, a partire da quelle colonne che si troveranno in un
=
confronto. -
Per quanto riguarda l'ordine delle colonne in un indice multicolonna, iniziare con quelle colonne che verranno utilizzate in una query da sole (un indice può essere utilizzato per una query con solo alcune delle sue colonne, a condizione che si trovino all'inizio dell'indice).
-
Potresti omettere colonne con bassa selettività, come
gender
.
Ad esempio, con le query precedenti, se sono tutte frequenti e tutte le colonne sono selettive, questi indici sarebbero utili:
... ON apartments (city_id, rooms, size)
... ON apartments (area_id, ad_type, price)
... ON apartments (area_id, ad_type, published_at)
Questi indici possono essere usati anche per WHERE
clausole con solo area_id
o city_id
in essi.
È brutto avere troppi indici.
Se il metodo sopra porta a troppi indici, ad es. perché l'utente può scegliere colonne arbitrarie per WHERE
clausola, è meglio indicizzare singole colonne o occasionalmente coppie di colonne che vanno regolarmente insieme.
In questo modo PostgreSQL può scegliere una scansione dell'indice bitmap per combinare più indici per una query. È meno efficiente di una normale scansione dell'indice , ma di solito meglio di una scansione sequenziale .