Du måste använda GiST om du vill använda någon annan indexmetod än de vanliga b-tree-indexen (eller hashindex, men de borde egentligen inte användas). PostGIS-index kräver GiST.
B-trädindex kan endast användas för grundläggande operationer som involverar jämlikhet eller ordning, som =
, <
, <=
, > ,
>=
, <> ,
MELLAN
och IN
. Även om du kan skapa ett b-trädindex på ett geomtery-objekt (punkt, region, etc.) kan det faktiskt bara användas för jämlikhet som ordningsjämförelser som >
är i allmänhet meningslösa för sådana föremål. Ett GiST-index krävs för att stödja mer komplexa och allmänna jämförelser som "innehåller", "korsar" etc.
Du kan använda btree_gist
förlängning
för att aktivera b-trädindexering för GiST. Det är betydligt långsammare än vanliga b-tree-index, men låter dig skapa ett index med flera kolumner som innehåller både GiST-bara typer och vanliga typer som text
, heltal
osv.
I dessa situationer behöver du verkligen använda explain analys
(explain.depesz.com
är användbar för detta) för att undersöka hur Pg använder olika index och kombinationer av index som du skapar. Prova olika kolumnordningar i index med flera kolumner och se om två eller flera separata index är mer effektiva.
Jag misstänker starkt att du kommer att få de bästa resultaten med GiST-indexet med flera kolumner i det här fallet, men jag skulle prova flera olika kombinationer av index och indexkolumnordningar för att se.