私は検索するブール型フィールドを持つRailsモデルを持っています(フィールドが真に設定されているすべてのインスタンスを見つけるスコープを使用します)。私はPostgresを使用しています。ブール型フィールドにインデックスを追加する
私の本質は、ブール値フィールドにインデックスを追加することです。その良い習慣、またはブールフィールドにインデックスを不要にする何かがPostgresにありますか?
私は検索するブール型フィールドを持つRailsモデルを持っています(フィールドが真に設定されているすべてのインスタンスを見つけるスコープを使用します)。私はPostgresを使用しています。ブール型フィールドにインデックスを追加する
私の本質は、ブール値フィールドにインデックスを追加することです。その良い習慣、またはブールフィールドにインデックスを不要にする何かがPostgresにありますか?
いいえ、論理フィールドでフィルタリングする場合は、ブール値フィールドのインデックスを作成できます。それは完全に合理的なことですが、PostgreSQLはすべてのインデックスと同様に、テーブルを十分に除外しないと無視してもかまいません - インデックススキャンとローフェッチのトン数は順次スキャンよりも高価です - - その列の値に応じて、影響を受ける場合もあります。
また、PostgreSQLではインデックスに条件を付けることができますが、これはブーリアンフィールドに役立つことがよくあります。 (詳細については、Partial Indexesを参照してください。)通常、その範囲内でフィルタリングや並べ替えを行う場合は、CREATE INDEX ... ON table (some_field) WHERE boolean_field
などのサービスを受けることをお勧めします。
Railsの移行で部分インデックスを作成するには、これを行います。この例では、モデルはProduct
、列はfeatured
です。
class AddFeaturedOnProducts < ActiveRecord::Migration
def change
add_index(:products, :featured, where: "featured")
end
end
ブール値フィールドに1つの値の99.9%が含まれている場合は、これを追加するだけで、他の可能な値をインデックスすることが非常に役立ちます。私。 99.9%の偽、0%のヌル、0.1%の真、次にテーブルのインデックスを作成する(boolval)boolvalが真である。真の値のみをインデックスします。 –
部分インデックスに言及する場合+1。 –