MySQL数据库索引

前几天看了一个mysql索引的视频,一直没有整理,今天突然想到在博客中记录一下,仅做自己记录整理用,如果对您有帮助那再好不过!

什么是索引?

索引是帮助mysql高效获取数据的排好序的数据结构

例如有如下的表:

如果索引的数据结构是二叉树的话,索引在col2上,那么可能是这种情况:

如果索引的数据结构是二叉树的话,索引在col1上,那么就是这种情况:

成为了这种线性结构,二叉树的深度是不可控的,这样会增加磁盘I/O的次数,降低查询效率。那么我们用红黑树替代

虽然红黑树能够自动平衡,但是实际上树的高度还是不能够控制。这时候就用到了B-tree

类似这种,将节点的容量扩大,从而达到降低树的深度的目的来减少I/O操作。将节点数据读取到内存中查找远比一次I/O的时间少。B-tree的特点就是每层节点数目非常多,层数很少。但是每个节点都是data域(指针)这无疑增大了节点大小,增加了磁盘I/O的时间,那么接下来就是mysql最终确定的B+tree,B+tree将所有的data都放到了叶子结点上

B+tree在不同引擎下的表现

MyISAM索引实现,MyISAM索引文件和数据文件是分离的

.frm -->表结构;

.MYI-->索引数据;

MYD-->数据

InnoDB索引和数据在一起

.frm-->表结构;

.ibd(index,data)

 

Innodb必须有主键,推荐使用整型。如果建表没有建,mysql也会主动建。

为什么要用整型?

1、在查找索引比较大小时,整型要比字符串更方便;

2、字符串不管是在磁盘中还是内存中都要比整型更占内存;

为什么自增?

好维护索引数据。新增一条数据,如果不是自增会发生裂变

 

索引数据结构如果采用hash,用hash表存储索引与数据的对应关系,查找更快,但是当条件出现范围,如>用不到索引

个人建的交流群1125844267,欢迎大家加入!

如果内容对大家有所帮助,感谢鼓励!实现我小时候一人给我一块钱的美梦,哈哈!

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Happy-Sir

有收获请打赏,哈哈

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值