PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Postgres GIST vs. Btree-Index

Sie müssen GiST verwenden, wenn Sie eine andere Indexmethode als die regulären B-Tree-Indizes (oder Hash-Indizes, aber sie sollten nicht wirklich verwendet werden) verwenden möchten. PostGIS-Indizes erfordern GiST.

B-Tree-Indizes können nur für grundlegende Operationen verwendet werden, die Gleichheit oder Ordnung beinhalten, wie = , < , <= , > , >= , <> , BETWEEN und IN . Während Sie einen B-Tree-Index für ein Geometrieobjekt (Punkt, Region usw.) erstellen können, kann er tatsächlich nur für die Gleichheit verwendet werden, wenn Vergleiche wie > angeordnet werden sind für solche Objekte im Allgemeinen bedeutungslos. Ein GiST-Index ist erforderlich, um komplexere und allgemeinere Vergleiche wie „enthält“, „überschneidet“ usw. zu unterstützen.

Sie können den btree_gist verwenden Erweiterung um die B-Tree-Indizierung für GiST zu aktivieren. Es ist erheblich langsamer als normale B-Tree-Indizes, ermöglicht es Ihnen jedoch, einen mehrspaltigen Index zu erstellen, der sowohl reine GiST-Typen als auch reguläre Typen wie text enthält , integer usw.

In diesen Situationen müssen Sie unbedingt explain analyze verwenden (explain.depesz.com ist hierfür hilfreich), um zu untersuchen, wie Pg verschiedene von Ihnen erstellte Indizes und Kombinationen von Indizes verwendet. Probieren Sie verschiedene Spaltenreihenfolgen in mehrspaltigen Indizes aus und prüfen Sie, ob zwei oder mehr separate Indizes effektiver sind.

Ich vermute stark, dass Sie in diesem Fall mit dem mehrspaltigen GiST-Index die besten Ergebnisse erzielen, aber ich würde verschiedene Kombinationen von Indizes und Reihenfolgen der Indexspalten ausprobieren, um dies zu sehen.