iamxi 2011-08-22 10:45
浏览 275
已采纳

数据库函数索引的问题

加入我的用户的状态有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即可

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥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 求三轴之间相互配合画圆以及直线的算法