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 .