Postgres-Indextypen helfen nur, wenn sie dem Abfragemuster entsprechen_
B-Baum ist der Standard aus gutem Grund, aber PostgreSQL hat andere Indextypen für Gleichheitsabfragen, Dokumentensuche, Geometrie und andere spezialisierte Zugriffsarten.
„Ein Index sollte hinzugefügt werden“ ist kein schlechter Ratschlag. Es ist unvollständiger Rat.
Die eigentliche Frage ist: Welche Art von Abfrage optimieren Sie?
PostgreSQL unterstützt mehrere Indextypen, da nicht alle Abfrageformen gleich aussehen. Eine gute Indexwahl folgt dem Zugriffsverhalten, anstatt blind auf das einfachste zurückzugreifen, was über die GUI generiert werden kann.
Beginnen Sie mit der Abfrage
Fragen Sie, was die Abfrage tatsächlich tut:
Gleichheitsabfrage
Bereichsscan
Volltextsuche
Geometrische Nähe
Dokumentenzugehörigkeit
Diese Frage sollte vor dem Indextyp gestellt werden.
B-Baum ist der Standard, nicht die universelle Antwort
B-Baum ist vielseitig und normalerweise geeignet für:
Gleichheit
Sortierung
Bereiche
Deshalb ist er der Standard.
Aber andere Fälle erfordern andere Werkzeuge. Zum Beispiel wird GiST relevant für geometrische Suchanfragen und Nachbarn in nächster Nähe, während GIN oft viel besser zu Dokumenten- und Volltextmustern passt.
Dieser Unterschied wird sehr schnell konkret:
CREATE INDEX articles_search_idx ON articles USING GIN (to_tsvector('english', title || ' ' || body));
Das löst ein anderes Problem als ein einfacher B-Baum auf created_at.
Gewohnheiten im Engineering, die skalieren
Merken Sie sich nicht zuerst exotische Indextypen. Merken Sie sich den Workflow:
Überprüfen Sie das Abfragemuster
Überprüfen Sie den Ausführungsplan
Wählen Sie den Indextyp, der zur tatsächlichen Arbeit passt
Damit bleibt das Indizieren an Beweisen und nicht an Folklore gebunden.