数据库函数索引的问题

加入我的用户的状态有1、2、3、4、5、6、7七种,状态是复合的,就是一个用户有可能是1、3、4或1、7的组合状态,也可能是七种都有,现在要在数据库里面设计状态的字段,如果用7个字段,到是简单,但是没了扩展性,如果使用单个字段来存,那在做索引的时候需要用到函数索引,小弟对函数索引不熟悉,怕影响效率。这表有过亿的数据量,实现想不出个解决。指教下该如何做么

按位存储, 方便计算, 容易扩展, 每一位表示一种状态, 该位值为1则表示该状态有效, 为0则为无效.

int a = 0xFF;//即为 255(1111 1111)表示8种状态全部有效
a ^ 0x01 = 0 则判断了第1个状态为有效
a ^ 0x10 = 0 则判断了第5个状态为有效
a ^ 0x1F = 0 则判断了第5,4,3,2,1位状态都有效
可以任意组合, 一个Integer 32位, 4字节 可以存储32个状态, 并存在2^32-1种组合, 其他的组合判断以此类推.

这样存储以后, 只需在查询时WHERE中做异或运算即可(ORACLE支持异或运算的)

或者存储为字符型, 同理, 查询时只需按位截取字符串, 判断是否为1即可

这里面介绍了详细的函数索引问题

http://gaijing814.iteye.com/blog/337000

使用位图索引。