mysql索引解读

一、聚集索引:Innodb存储引擎的索引

1、主键索引:所有数据都存储在主键索引上,使用主键查找效率非常高

2、辅助索引:辅助索引上存储的是主键值,查询整行数据需要先通过此索引找到主键,再通过主键索引找到对应的数据,因为只有主键上有整行数据。如果只查询id和name,那此索引name可以找到id,就不需要再去查主键索引。所以有时会通过建立联合索引查找数据,联合索引上包含了需要的所有数据,如果不包含所有需要的数据,那么联合索引的意义就不大,还是需要去查主键索引。

 

 

二、非聚集索引:MyISAM存储引擎的索引

1、主键索引:主键索引上存储的是整行数据的地址,也就是说索引和数据是分开存储的;

 

2、辅助索引:索引上也是存储数据地址

 

 

 

总结:

1、Innodb和MyISAM存储引擎使用B+树结构存储,所有数据都存储在叶子节点上,从左到右从小到大,非常方便查找和范围取值;

2、MEMORY/HEAP存储引擎:支持HASH和B+树索引,memory主要用于临时表;

3、不同的存储引擎会使用不同的索引;

4、Innodb必须有主键,主键和数据放一起存储;因为数据必须挂在主键上,如果没建主键,mysql会建立一个虚拟主键,用于挂载数据;辅助索引存储主键值,再通过主键获取数据;

5、MyISAM索引和数据分开存储,主键索引和辅助索引都是存储数据的地址;

 

 

备注:https://mp.weixin.qq.com/s/cOdvz3SPltNQsm-C2Cyd0A

包括:hash、二叉树、红黑树、AVL树、B树、B+树的特性,以及其他数据结构不适合作为索引的原因

hash:没办法进行范围查找

二叉树:容易倾斜

红黑树:也有倾斜问题

AVL树:一个节点只有一个数据,查找数据从磁盘上查找,效率低

 

B-树:索引存在于叶子节点和非叶子节点,非叶子节点也需要存有数据,这样会导致相同大小索引块上存储的索引变少

 

B+树:所有关键数据都在叶子节点上,并且都是有序的,各叶子节点是有序的链表结构,非叶子节点不存储数据只存储索引,数据都放在叶子节点存储,这样索引节点上存储的索引就更多,读入一个索引块,能查找的数据更多,减少磁盘的IO。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值