WHERE
が何であるかを理解する必要があります このクエリで使用する句、それぞれが発生する頻度、および各条件の選択性。
-
必要がない限り、めったに発生しないクエリのインデックスを作成しないでください。
-
=
で発生する列から始めて、複数列のインデックスを使用します 比較。 -
複数列インデックスの列の順序については、クエリで単独で使用される列から始めます(インデックスは、インデックスの先頭にある場合、一部の列のみでクエリに使用できます)。
-
gender
のように、選択性の低い列は省略できます。 。
たとえば、上記のクエリで、すべてが頻繁で、すべての列が選択的である場合、これらのインデックスは適切です。
... ON apartments (city_id, rooms, size)
... ON apartments (area_id, ad_type, price)
... ON apartments (area_id, ad_type, published_at)
これらのインデックスは、WHERE
にも使用できます。 area_id
のみの句 またはcity_id
それらの中で。
インデックスが多すぎるのは悪いことです。
上記の方法でインデックスが多すぎる場合、たとえばユーザーはWHERE
の任意の列を選択できるためです 条項では、個々の列、または定期的に一緒になる列のペアにインデックスを付けることをお勧めします。
そうすれば、PostgreSQLはビットマップインデックススキャンを選択できます。 1つのクエリに対して複数のインデックスを組み合わせる。これは、通常のインデックススキャンよりも効率的ではありません。 、ただし通常はシーケンシャルスキャンよりも優れています 。