È necessario utilizzare GiST se si desidera utilizzare un metodo di indicizzazione diverso dai normali indici b-tree (o indici hash, ma non dovrebbero essere utilizzati). Gli indici PostGIS richiedono GiST.
Gli indici B-tree possono essere utilizzati solo per operazioni di base che coinvolgono l'uguaglianza o l'ordinamento, come =
, <
, <=
, >
, >=
, <>
, BETWEEN
e IN
. Sebbene tu possa creare un indice b-tree su un oggetto geometra (punto, regione, ecc.), in realtà può essere utilizzato solo per l'uguaglianza come confronti di ordinamento come >
sono generalmente privi di significato per tali oggetti. Un indice GiST è necessario per supportare confronti più complessi e generali come "contiene", "interseca", ecc.
Puoi utilizzare btree_gist
estensione
per abilitare l'indicizzazione b-tree per GiST. È considerevolmente più lento dei normali indici b-tree, ma ti consente di creare un indice a più colonne che contiene sia tipi solo GiST che tipi regolari come text
, integer
, ecc.
In queste situazioni è davvero necessario utilizzare explain analyze
(explain.depesz.com
è utile per questo) per esaminare come Pg utilizza vari indici e combinazioni di indici che crei. Prova diversi ordinamenti delle colonne negli indici a più colonne e verifica se due o più indici separati sono più efficaci.
Sospetto fortemente che in questo caso otterrai i migliori risultati con l'indice GiST multicolonna, ma proverei diverse combinazioni di indici e ordini di colonne dell'indice per vedere.