我有一个Rails模型,其中有一个布尔字段可以搜索(我使用一个范围来查找字段设置为true的所有实例).我在用Postgres.

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

推荐答案

不,如果要按布尔字段进行筛选,可以为其编制索引.这是一个非常合理的做法,尽管与所有索引一样,PostgreSQL可能会 Select 忽略它,如果它不排除足够多的表——索引扫描加上大量的行获取可能比顺序扫描更昂贵——这可能会影响到您,也可能不会影响到您,具体取决于该列中的值.

您还应该知道,PostgreSQL允许您对索引设置条件,我经常发现这对布尔字段很有用.(详情请参见Partial Indexes.)如果您通常在该范围内进行过滤或排序,那么最好使用CREATE INDEX ... ON table (some_field) WHERE boolean_field之类的工具.

Postgresql相关问答推荐

无法在PostgreSQL中创建方案和表

PostgreSQL:函数结果表内冲突(...)上的";中的字段名称

用于JSON数组的带有组合条件的Postgres JSONB Select 查询

如何在Postgres中对分区表使用Hibernate验证?

无法使用PGx连接到Postgres数据库AWS RDS

在PostGreSQL中获取最近日期的项目

在Postgres游标中从一行变量中减go 另一行变量

Postgres数据库系统已准备好接受连接和docker compose

转到 time.Time to postgresql timestamptz 无法用 time.Now() 保存

包含间隔在 jooq 和 postgres 中没有按预期工作

从 PostgreSQL 中的每个组中抽取 N 个样本

如何计算过滤器中的百分比

我可以使用 Rails 将数组存储在 hstore 中吗

postgresql查询中的正则表达式不区分大小写

推送到 Heroku 时出现带有 Postgres 的 Rails 迁移错误

升级到 OSX Mavericks 后修复 postgresql

整数除法返回 0

SQLAlchemy 声明式:定义触发器和索引 (Postgres 9)

使用python将数据从csv复制到postgresql

Capistrano 与 PostgreSQL,错误:database is being accessed by other users