我有一个Rails模型,其中有一个布尔字段可以搜索(我使用一个范围来查找字段设置为true的所有实例).我在用Postgres.
我的直觉是在布尔字段上添加索引.这是一个很好的实践,还是Postgres中有什么东西使得布尔字段上的索引变得不必要?
我有一个Rails模型,其中有一个布尔字段可以搜索(我使用一个范围来查找字段设置为true的所有实例).我在用Postgres.
我的直觉是在布尔字段上添加索引.这是一个很好的实践,还是Postgres中有什么东西使得布尔字段上的索引变得不必要?
不,如果要按布尔字段进行筛选,可以为其编制索引.这是一个非常合理的做法,尽管与所有索引一样,PostgreSQL可能会 Select 忽略它,如果它不排除足够多的表——索引扫描加上大量的行获取可能比顺序扫描更昂贵——这可能会影响到您,也可能不会影响到您,具体取决于该列中的值.
您还应该知道,PostgreSQL允许您对索引设置条件,我经常发现这对布尔字段很有用.(详情请参见Partial Indexes.)如果您通常在该范围内进行过滤或排序,那么最好使用CREATE INDEX ... ON table (some_field) WHERE boolean_field
之类的工具.