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

Was bei Abfragen mit vielen Spalten in der WHERE-Klausel indiziert werden soll

Sie müssen herausfinden, was WHERE ist Klauseln, die Sie mit dieser Abfrage verwenden werden, wie oft sie auftreten und wie selektiv jede Bedingung sein wird.

  • Indexieren Sie nicht selten auftretende Abfragen, es sei denn, Sie müssen es tun.

  • Verwenden Sie mehrspaltige Indizes, beginnend mit den Spalten, die in einem = vorkommen Vergleich.

  • Was die Reihenfolge der Spalten in einem mehrspaltigen Index betrifft, beginnen Sie mit den Spalten, die in einer Abfrage verwendet werden (ein Index kann für eine Abfrage mit nur einigen seiner Spalten verwendet werden, vorausgesetzt, sie stehen am Anfang des Index).

  • Sie können Spalten mit geringer Selektivität wie gender weglassen .

Wenn beispielsweise bei Ihren obigen Abfragen alle häufig vorkommen und alle Spalten selektiv sind, wären diese Indizes gut:

... ON apartments (city_id, rooms, size)

... ON apartments (area_id, ad_type, price)

... ON apartments (area_id, ad_type, published_at)

Diese Indizes könnten auch für WHERE verwendet werden Klauseln mit nur area_id oder city_id in ihnen.

Es ist schlecht, zu viele Indizes zu haben.

Wenn die obige Methode zu zu vielen Indizes führen würde, z. weil der Benutzer beliebige Spalten für WHERE auswählen kann -Klausel ist es besser, einzelne Spalten oder gelegentlich Paare von Spalten zu indizieren, die regelmäßig zusammengehören.

Auf diese Weise kann PostgreSQL einen Bitmap-Index-Scan auswählen mehrere Indizes für eine Abfrage zusammenzufassen. Das ist weniger effizient als ein normaler Index-Scan , aber normalerweise besser als ein sequentieller Scan .