mysq索引演化过程

mysql索引的演化

其实 mysql 索引最开始设计的是二叉树,这就有一个缺点,大的数据永远往右边插入,比如1234567,直接变成了链表

为了解决这个问题,引入了红黑树,read/black tree, 本质上是一个平衡二叉树,可以实现自我的平衡,不过也有缺点,如果数据量大的话,树的高度不可控。
这里要补充一下 mysql 索引使用的过程:
先拿到根节点(一次io),判断是否是要查询的数据,不是的话再往leftNode 或者 rightNode(一次io) ,以此类推,如果树很高的话,io次数会变多,效率就低下

B树,B+树 一个节点可以存储多个元素,默认16KB的存储大小,进行查找时,先加载一个节点到内容,随机查找,找到元素或者指针后再将下一个节点加载到内容。
B+树的数据都保存再叶子节点,且叶子节点之间指针维护顺序。
节点16KB是可以修改的,但是不建议,因为16KB是mysql长期测试得到的结果,3次IO就可以搞定2000W左右的数据,如果数据量再大就要考虑分库分表了。

mysql的索引结构

myisam 与 innodb 在索引上的区别:
innodb 有2个文件

  1. fm (表结构)
  2. index (索引和数据放在一起)

myisam 有3个文件

  1. fm (表结构)
  2. index
  3. data (索引和数据分开)

myisam 是典型的非聚集索引

为什么mysql要建一个主键?

如果没有主键 mysql会维护一个rowid 做主键,加大mysql的性能损耗

为什么建议主键设计成整型?

索引在查找的时候会有大量的比对操作,用整型一次就可以比对完成,
而字符串是需要逐位去比较的,太浪费性能,而且空间上来说更节约。

为什么建议主键设计成自增?

索引页是有大小限制的16KB,如果是无序插入,超过这个大小,会分裂。
而且B+树低层会帮忙把数据从大到小,从左到右维护,如果数据自增,插入的时候向后面添加就好,如果不是自增会出现插入的情况,造成额外的挪动。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值