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

Wie zwinge ich Postgres, einen bestimmten Index zu verwenden?

Angenommen, Sie fragen nach der in vielen Datenbanken üblichen "Indexhinweis"-Funktion, PostgreSQL bietet eine solche Funktion nicht. Dies war eine bewusste Entscheidung des PostgreSQL-Teams. Eine gute Übersicht darüber, warum und was Sie stattdessen tun können, finden Sie hier. Die Gründe sind im Wesentlichen, dass es sich um einen Performance-Hack handelt, der später tendenziell mehr Probleme verursacht, wenn sich Ihre Daten ändern, während der Optimierer von PostgreSQL den Plan basierend auf den Statistiken neu bewerten kann. Mit anderen Worten, was heute ein guter Abfrageplan sein könnte, wird wahrscheinlich kein guter Abfrageplan für alle Zeiten sein, und Indexhinweise erzwingen einen bestimmten Abfrageplan für alle Zeiten.

Als sehr stumpfen Hammer, nützlich zum Testen, können Sie den enable_seqscan verwenden und enable_indexscan Parameter. Siehe:

  • Indexnutzung untersuchen
  • enable_ Parameter

Diese sind nicht für den laufenden Produktionseinsatz geeignet . Wenn Sie Probleme mit der Auswahl des Abfrageplans haben, sollten Sie die Dokumentation zum Aufspüren von Abfrageleistungsproblemen lesen. Setzen Sie nicht einfach enable_ Parameter und weggehen.

Sofern Sie keinen sehr guten Grund für die Verwendung des Index haben, trifft Postgres möglicherweise die richtige Wahl. Warum?

  • Bei kleinen Tabellen ist es schneller, sequentielle Scans durchzuführen.
  • Postgres verwendet keine Indizes, wenn Datentypen nicht richtig übereinstimmen, Sie müssen möglicherweise geeignete Umwandlungen einschließen.
  • Möglicherweise verursachen Ihre Planer-Einstellungen Probleme.

Siehe auch diesen alten Newsgroup-Beitrag.