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