mysql联合索引

mysql从本质上讲,联合索引也是一颗B+树,不同的是联合索引的键值的数量不是1 ,而是大于等于2,
(1,1),(1,2),(2,1),(2,4),(3,1),(3,2)
其实和之前讨论的单个键值的B+树并没有什么不同,键值都是排序的,通过叶子节点可以逻辑上顺序地读出所有数据
就上面的数据按照(a,b)的顺序进行了存放。
select * from table where a=xxx and b=xxx,显然可以使用(a,b)这个联合索引,
select * from table wher ea=xxx,也可以使用(a,b) 这个联合索引的
但对于 select * from table where b=xxx;则不可以使用这颗B+树索引,
可以发现叶子节点上b值为1,2,1,4,1,2显然不是排序的,因此对于b列的查询使用不到(a,b)的索引。
#联合索引的第二个好处是已经对第二个键值进行了排序处理,
例如很多情况下应用程序都需要查询某个用户的购物情况,并按照时间进行排序,最后取出最近3次购买记录
这时使用联合索引可以避免多一次的排序操作,因为索引本身在叶子节点已经排序了。
mysql> create table buy_log(
-> userid int unsigned not null,
-> buy_date date
-> )engine=innodb;
Query OK,

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值