sql >> Databasteknik >  >> RDS >> PostgreSQL

Postgres GIST vs Btree index

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.




  1. Automatiserad testning av uppgraderingsprocessen för PostgreSQL

  2. Hämta datatypinformation för kolumner i en Oracle OCCI ResultSet

  3. Lägg upp MySQL-resultat med AJAX via jQuery

  4. MYSQL-fråga med variabel som tabellnamn i LEFT JOIN