mysql位运算 索引_mysql 使用位运算

如果你不知道什么是位运算的话, 那么请你先去看看基础的C语言教程吧。

与运算 a & b  ,

或运算 a | b ,

异或运算 a ^ b ,

或者

你也可以将 与运算理解为 + 法

例如

1|2 = 3   (1+2 = 3)

1|2|4 = 7 (1+2+4 = 7)

将 异或运算理解为 - 法

例如

3^2 = 1 (3-2 = 1)

3^1 = 2  (3-1 = 2)

最后将 与运算 作为判断

例如

3&2 = 1    (3 = 1 + 2, 由 1和2组成 ,所以判断3&2 = 1 )

3&4 = 0   ( 3 没有由 4组成,所以判断3&4 = 0)

那么位运算有何用处呢, 例如 UNIX系统中的权限, 通常我们所知  权限分为  r 读, w 写, x 执行,其中

它们的权值分别为4,2,1, 所以 如果用户要想拥有这三个权限 就必须  chomd 7  , 即 7=4+2+1 表明

这个用户具有rwx权限,如果只想这个用户具有r,x权限 那么就 chomd 5即可

说道此处就要涉及到数据库了。

通常 我们的数据表中 可能会包含各种状态属性, 例如 blog表中 , 我们需要有字段表示其是否公开,是否有设置密码,是否被管理员封锁,是否被置顶等等。 也会遇到在后期运维中,策划要求增加新的功能而造成你需要增加新的字段。

这样会造成后期的维护困难,数据库增大,索引增大的情况。 这时使用位运算就可以巧妙的解决。

例如

define('B_PUBLIC',1);  // 公开

define('B_PASSWORD',2);  // 加密

define('B_LOCK',4); // 封锁

define('B_TOP',8); // 置顶

?>

-- 公开blog  给status进行或运算

UPDATE blog SET status = status | 1;

-- 加密blog 给status进行或运算

UPDATE blog SET status = status | 2;

-- 封锁blog

UPDATE blog SET status = status | 4;

-- 解锁blog

UPDATE blog SET status = status ^ 4;

--查询所有被置顶的blog

SELECT * FROM blog WHERE status & 8;

虽然节省了空间,但是由于没有办法对status字段使用索引,所以如何使用来优化查询才是最重点

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值