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

Postgres GIST vs Btree indeks

Du skal bruge GiST, hvis du vil bruge en anden indeksmetode end de almindelige b-tree-indekser (eller hash-indekser, men de skal egentlig ikke bruges). PostGIS-indekser kræver GiST.

B-træ-indekser kan kun bruges til grundlæggende operationer, der involverer lighed eller orden, som f.eks. = , < , <= , > , >= , <> , MELLEM og IN . Mens du kan oprette et b-træ-indeks på et geometriobjekt (punkt, område osv.), kan det faktisk kun bruges til lighed som bestillingssammenligninger som > er generelt meningsløse for sådanne genstande. Et GiST-indeks er påkrævet for at understøtte mere komplekse og generelle sammenligninger som "indeholder", "skærer" osv.

Du kan bruge btree_gist udvidelse for at aktivere b-træ indeksering for GiST. Det er betydeligt langsommere end almindelige b-tree-indekser, men giver dig mulighed for at oprette et indeks med flere kolonner, der indeholder både GiST-kun typer og almindelige typer som tekst , heltal osv.

I disse situationer skal du virkelig bruge explain analyse (explain.depesz.com er nyttig til dette) for at undersøge, hvordan Pg bruger forskellige indekser og kombinationer af indekser, som du opretter. Prøv forskellige kolonnerækkefølger i indekser med flere kolonner, og se, om to eller flere separate indekser er mere effektive.

Jeg har en stor mistanke om, at du vil få de bedste resultater med GiST-indekset med flere kolonner i dette tilfælde, men jeg ville prøve flere forskellige kombinationer af indekser og rækkefølge af indekskolonne for at se.




  1. Spring Data JPA + Hibernate Spring over låste rækker (PostgreSQL)

  2. Oracle - Sådan håndhæves regler for relationer afhængigt af attributposter (simpelt eksempel)

  3. hvordan gemmer jeg java datotype til mysql datotype?

  4. De bedste tilgængelige databaseovervågningsmuligheder for din virksomhed