我有一个带有我搜索的布尔字段的Rails模型(我使用一个范围来查找字段设置为true的所有实例)。我正在使用Postgres。
我的直觉是在布尔字段上添加索引。这是一个很好的做法,或者Postgres中有什么东西可以在布尔字段上建立索引吗?
答案 0 :(得分:37)
不,如果你要对它进行过滤,你可以索引一个布尔字段。这是一个非常合理的事情,尽管与所有索引一样,PostgreSQL可能会选择忽略它,如果它不会排除足够的表 - 索引扫描加上大量的行提取可能比顺序扫描更昂贵 - - 根据该栏中的数值,可能会或可能不会影响您。
你还应该知道PostgreSQL允许你在索引上放置条件,我常常觉得它对布尔字段很有用。 (有关详细信息,请参阅Partial Indexes。)如果您通常会在该范围内进行过滤或排序,则CREATE INDEX ... ON table (some_field) WHERE boolean_field
可能最适合您。
答案 1 :(得分:16)
要在Rails迁移中创建部分索引,您可以执行此操作。在此示例中,模型为Product
,列为featured
。
class AddFeaturedOnProducts < ActiveRecord::Migration
def change
add_index(:products, :featured, where: "featured")
end
end