在布尔字段上添加索引

我有一个带有我搜索的布尔字段的Rails模型(我使用一个范围来查找字段设置为true的所有实例)。 我正在使用Postgres。

我的直觉是在布尔字段上添加索引。 这是一个很好的做法,还是在Postgres中有什么东西可以使布尔字段的索引变得不必要?

不,如果你要对它进行过滤,你可以索引一个布尔字段。 这是一个非常合理的事情,尽管与所有索引一样,PostgreSQL可能会选择忽略它,如果它不会排除足够的表 – 索引扫描加上大量的行提取可能比顺序扫描更昂贵 – – 根据该列中的值,可能会或可能不会影响您。

您还应该知道PostgreSQL允许您在索引上添加条件,我经常发现它对布尔字段很有用。 (有关详细信息,请参阅部分索引 。)如果您将在该范围内进行常规过滤或排序,则最好通过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