Mysql索引底层原理与性能优化


在一般的开发中不会有碰到数据结构、算法的一些底层东西。但是了解了之后会对你的开发有很大的帮助。最近学习了一下。做一个笔记。更深的学习,请看相关书籍或视频。

一、索引是帮助Mysql高效获取数据的排好序的数据结构
二、索引的数据结构
  • 二叉树
  • 红黑树
  • Hash表
  • B-Tree
  • B+Tree
1、二叉树

如图(一个二叉树插入的过程):在这里插入图片描述

有一个根节点,有了根结点之后,每个顶点定义了唯一的父结点,和最多2个子结点。左侧的节点永远比右侧的要小。

如图(查找数据)在这里插入图片描述

查找数据,如果按插入顺序查询要7步(因为是最后一个插入的),二叉树了3步查出结果。比顺序结构快了很多。但是有一个问题,如果是数据是顺序递增。那就会变为链表,那索引就无效了。那么就出现了红黑树

如图:在这里插入图片描述

2、红黑树

如图:(红黑树的插入过程)在这里插入图片描述

所以,红黑树又是二叉树的升级版,是特化平衡二叉树。但是在数据量大的时候树的高度就会增加,然后会导致IO过程多,查询速度会减慢些。

3、Hash表

是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。

简单说就是有一个表存着一个值得算出来的hash值,和对应的数据地址,查询很快。但是有个缺点,如果查询大于小于的数据时候就不行了。所以有一定的局限。

4、B-Tree

B树和平衡二叉树稍有不同的是B树属于多叉树又名平衡多路查找树。简单点说就是一个节点可以有多个分叉。这样可以减少树的高度从而减少IO磁盘。

如图(B-Tree插入过程):

在这里插入图片描述

上面说了这么多其实都是在铺垫。Mysql索引底层用的是B+Tree和Hash表(可以选择)。B+Tree又是啥。B+Tree是B-Tree的优化版。其实上面的说的数据和索引都是在一个节点存储。B+Tree,是把数据都放到了叶子节点,上面都是索引,这样就可以减少节点的存储空间,而来增加的每个节点的索引数量。叶子节点就是它的所有存储数据。

5、B+Tree

如图(B+插入过程):在这里插入图片描述

三、存储引擎

聚集索引:

聚集索引-叶节点包含了完整的数据记录。就是说索引和数据是在一个文件存储(如:InnoDB引擎)

非聚集索引:

非聚集索引就是索引和数据不在一个文件存储。索引有索引的文件对应的数据的地址。数据是数据的文件。(如:MyISAM引擎)

四、性能优化优化

为什么InnoDB表必须有主键,并且推荐使用整形的自增主键?

1、InnoDB表文件本身就是按B+Tree组织的一个索引结构文件,所谓要有主键。如果表没有设计主键那么Mysql表中找一列,如果没找到会在后台默认加一个看不见的主键。

2、整形的比较会更快,自增会避免在插入数据时在数据的中间插入破坏结构。

待续…

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值