萌新也能看得懂之mysql索引底层原理

索引是什么?索引就是一种数据结构,目的是为了加快查询速度。
既然是为了加快查找的数据结构,那就有以下几种选择。
1.hash索引。2.树。
选择hash索引:hash索引虽然查找是o(1)级别的,但是不能进行范围查询。比如要查找年龄20~30的,只能进行全表扫描,也就是对于范围查找索引失效,会进行全表扫描。

选择树结构:查找算法如果是有序的就可以选择二分法查找,为了使用二分法的数据结构有树。树的选择方案很多,有二叉树,b树,红黑树等。mysql默认使用的是B+树。

二叉树,B树有一个最大的缺点就是磁盘io次数多。因为一个节点就是一个磁盘块,二叉树每个节点只存储一行数据,也就是说一次磁盘io只能读取到一行,通常需要nlogn次磁盘io才能找到查找的数据,B数一个节点倒是可以存储多行数据,但是他也把每一行非索引列数据也存进来占用空间,要知道操作系统是以页为单位进行磁盘io的,一页是4KB,即虽然一个节点存储了多行,但是你一次io读4kb,需要读取多次才能全部读取完成这个节点的数据。

因此我们选择b+树,它的特点是一个节点存储多行数据,并且只存储了索引列的数据,全部列的数据是放在最后的叶子节点的。这里需要注意对于主键索引,叶子节点存储(存的是磁盘物理地址)的所有列的数据,。非主键索引存的是主键索引的地址,根据非主键索引找到主键索引就叫回表查询。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值