前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[MySQL] mysql中bitmap的简单运用

[MySQL] mysql中bitmap的简单运用

作者头像
唯一Chat
发布2019-11-29 00:39:43
1.9K0
发布2019-11-29 00:39:43
举报
文章被收录于专栏:陶士涵的菜地陶士涵的菜地

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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-11-26 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档