【发布时间】:2015-11-19 10:17:38
【问题描述】:
是否可以通过flags 上的索引来加快如下查找速度,其中5 可以是任意数字?
select * from user where flags & 5 > 0
flags 是一个整数列,其背后的想法是将不同的布尔属性存储在一个列中。所以对于这个例子,它可能是:
flags bit | 1 | 2 | 4 | 8 | ...
meaning | is admin | banned | password needs change | whatever | ...
所以可以通过上面的select语句找到需要更改密码的admin用户(即使他也设置了其他标志)。
对于 postgreSQL,我可以为上述查询添加这样的表达式索引:
create index index_name on user ((flags & 5 > 0))
但是我必须为每个标志组合创建一个索引,因为上述索引仅适用于值 flags & 5。
那么有没有索引可以加速flags & any_number > 0?
我知道我可以为每个标志使用不同的布尔列(我觉得有 > 50 个标志很乱)或 postgreSQL 位数据类型(我假设有一个索引类型),但我特别感兴趣如果有办法在整数列上为上述用例建立索引。
【问题讨论】:
标签: postgresql indexing boolean bitwise-operators