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

Postgres GIST vs indice Btree

È 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.