29

検索するブールフィールドを持つRailsモデルがあります(フィールドがtrueに設定されているすべてのインスタンスを検索するスコープを使用します)。私はPostgresを使用しています。

私の本能は、ブールフィールドにインデックスを追加することです。それは良い習慣ですか、それともブールフィールドのインデックスを不要にする何かがPostgresにありますか?

4

2 に答える 2

43

いいえ、ブールフィールドでフィルタリングする場合は、ブールフィールドにインデックスを付けることができます。これは完全に合理的なことですが、すべてのインデックスと同様に、PostgreSQLは、テーブルを十分に除外しない場合は無視することを選択する可能性があります-インデックススキャンと大量の行フェッチは、シーケンシャルスキャンよりもコストがかかる可能性があります- -その列の値に応じて、影響する場合と影響しない場合があります。

また、PostgreSQLではインデックスに条件を設定できることにも注意してください。これはブールフィールドで役立つことがよくあります。(詳細については、部分インデックスを参照してください。)そのスコープ内で一般的にフィルタリングまたはソートを行う場合は、のようなものが最適な場合がありますCREATE INDEX ... ON table (some_field) WHERE boolean_field

于 2012-09-22T00:53:21.130 に答える
17

Railsの移行で部分インデックスを作成するには、これを行います。この例では、モデルはProductであり、列はfeaturedです。

class AddFeaturedOnProducts < ActiveRecord::Migration
  def change
    add_index(:products, :featured, where: "featured")
  end
end
于 2016-05-10T22:20:42.527 に答える