多くの検索オプションがある検索フォームがあります。これらすべての列にどのようにインデックスを付けますか? 多くの列を持つインデックスを作成しても問題ありませんか?
レールの例:
add_index :cars, [:brand, :fuel, :year_from, :year_to, :price_from, :price_to] and so on...
単一のインデックスに多数の列を含めることは「OK」ですか?
PS私は最新のPostgresql DSを使用しています
多くの検索オプションがある検索フォームがあります。これらすべての列にどのようにインデックスを付けますか? 多くの列を持つインデックスを作成しても問題ありませんか?
レールの例:
add_index :cars, [:brand, :fuel, :year_from, :year_to, :price_from, :price_to] and so on...
単一のインデックスに多数の列を含めることは「OK」ですか?
PS私は最新のPostgresql DSを使用しています
これは、データベース テーブルへのクエリをどのように計画しているかによって異なります。句内のすべてのフィールドを持つクエリを実行する予定ですか?
クエリに句内のすべてのフィールドが含まれる場合、複数列インデックスを作成するのが正しい方法ですが、where 句でフィルター処理するフィールドがこれらの一部にすぎない場合 (たとえば、ブランドと燃料のみ、また、year_from と year_to のみの場合もあります)、さまざまな組み合わせで、フィールドごとに 1 つのインデックスを作成することをお勧めします...
多列インデックスは非常に大きくなり、おそらく大きすぎて役に立たないでしょう。PostgreSQL には優れたプランナーがあり、おそらくインデックスの最初の数列を使用してから、インデックスの残りの部分をスキャンする代わりに行をスキャンします。これは、インデックスの最初の数列が検索条件として指定されていることを前提としています。
ドキュメントには、複数列のインデックスについてこれが記載されていることに注意してください。
複数列のインデックスは慎重に使用する必要があります。ほとんどの場合、1 つの列のインデックスで十分であり、スペースと時間を節約できます。テーブルの使用法が非常に定型化されていない限り、3 つ以上の列を持つインデックスは役に立ちません。
単一列インデックスを使用します。
どの基準が最も検索される可能性が高いかがよくわかっている場合は、将来、2 列のインデックスを 1 つまたは 2 つ追加して実験することをお勧めします。