mysql索引原理

索引的本质

索引是帮助MYSQL高效获取排好序的数据的一种数据结构。
我们先看几种常用的数据结构。
1、下图是一种二叉树的存储结构。
在这里插入图片描述/2、红黑树(二叉平衡树),可以解决二叉树单边增加变成链表的问题。但是红黑树如果数据变多查询IO次数也会很多,消耗也很大。
在这里插入图片描述
3、B - tree,相对于红黑树做了横向的拓展,那么这种数据结构能够减少IO资源的支出。提高查询速度。
在这里插入图片描述
4、B + tree相对于B-tree 的一种变形,这种数据结构也是目前应用在mysql的INNODB类型的索引上。这种数据结构的每个索引节点大约14B的空间(其中bigint 8B,内存地址大约6B),叶子节点1KB大小,那么一次io与内存交互是16K的话,计算每一层会有1170个节点那么叶子节点能够存放大约1170117016个数据,大约两千多万条,也就是说小于两千万多可以用索引查询到理论上来说。
在这里插入图片描述
5、以上说的都是非聚合索引,那么聚合索引的结构如下图:
在这里插入图片描述
联合索引本质:
当创建**(a,b,c)联合索引时,相当于创建了(a)单列索引**,(a,b)联合索引以及**(a,b,c)联合索引**
想要索引生效的话,只能使用 a和a,b和a,b,c三种组合;当然,我们上面测试过,a,c组合也可以,但实际上只用到了a的索引,c并没有用。
结论:尽量使用聚合索引!
Myisam这种文件存储类型是不常用的。这种类型是将索引文件和数据文件分开的。查找数据是先查找索引文件,然后根据内训地址去查找数据。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值