• [MySQL] mysql中bitmap的简单运用


    bitmap就是在一个二进制的数据中,每一个位代表一定的含义,这样最终只需要存一个整型数据,就可以解释出多个含义.
    业务中有一个字段专门用来存储用户对某些功能的开启和关闭,如果是传统的思维,肯定是建一个字段来存0代表关闭,1代表开启,那么如果功能很多或者需要加功能开关,就需要不停的创建字段.
    使用bitmap的思路就只需要一个字段就可以了,建一个entuserstatus字段,该字段的二进制表示中,从右到做数,从1开始数.比如第19位代表是否开始归档,那么就直接操作这一位的0和1就可以表示该用户是否开启归档功能.


    email表的第19位,作为归档开启的位,1是开启 0是关闭;262144代表是第19位为1的十进制数
    查询开启的
    select email,enterpriseId from email where entuserstatus & 262144=262144;
    开启归档
    update email set entuserstatus = entuserstatus|262144 where id=670602 limit 1
    关闭归档
    update email set entuserstatus = entuserstatus^262144 where id=670602 limit 1

    另一种形式
    查询开启归档的
    select id,email,enterpriseId,entuserstatus from email where entuserstatus>>18 & 1=1;
    开启归档
    update email set entuserstatus = entuserstatus|(1<<18)  where id=670602 limit 1
    关闭归档
    update email set entuserstatus = entuserstatus^(1<<18)  where id=670602 limit 1

    异或(^)运算
    异或运算通俗地讲就是一句话
    同为假,异为真
    所以它是这样的算法:
    0&0=0,0&1=1,1&0=1,1&1=0

  • 相关阅读:
    【QT】Linux下安装QT开发环境
    【C#】Winform嵌入dll到exe中
    使用maven插件构建docker镜像并推送到阿里镜像仓库
    蓝牙耳机连接 win10音量异常
    max virtual memory areas vm.max_map_count [65530] is too low
    docker 安装 confluence
    jenkins docker push脚本
    docker 删除指定名称的所有容器
    docker 安装 xxl-job-admin
    docker 安装 sentinel
  • 原文地址:https://www.cnblogs.com/taoshihan/p/11937410.html
Copyright © 2020-2023  润新知