加入我的用户的状态有1、2、3、4、5、6、7七种,状态是复合的,就是一个用户有可能是1、3、4或1、7的组合状态,也可能是七种都有,现在要在数据库里面设计状态的字段,如果用7个字段,到是简单,但是没了扩展性,如果使用单个字段来存,那在做索引的时候需要用到函数索引,小弟对函数索引不熟悉,怕影响效率。这表有过亿的数据量,实现想不出个解决。指教下该如何做么
3条回答 默认 最新
- Lionroo 2011-08-22 12:47关注
按位存储, 方便计算, 容易扩展, 每一位表示一种状态, 该位值为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即可
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥15 LiBeAs的带隙等于0.997eV,计算阴离子的N和P
- ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘
- ¥15 matlab有关常微分方程的问题求解决
- ¥15 perl MISA分析p3_in脚本出错
- ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
- ¥15 ubuntu虚拟机打包apk错误
- ¥199 rust编程架构设计的方案 有偿
- ¥15 回答4f系统的像差计算
- ¥15 java如何提取出pdf里的文字?
- ¥100 求三轴之间相互配合画圆以及直线的算法