在布尔字段上添加索引

时间:2012-09-22 00:47:04

标签: ruby-on-rails postgresql

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

我的直觉是在布尔字段上添加索引。这是一个很好的做法,或者Postgres中有什么东西可以在布尔字段上建立索引吗?

2 个答案:

答案 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