Mysql索引数据结构详解及性能调优

7次阅读

共计 1083 个字符,预计需要花费 3 分钟才能阅读完成。

本人从事 java 开发四年了,以前学习了不少东西,都忘了不少,最近就想着总结一下,突然就想到想写博客文章来总结下自己这些年学习的东西,记录下各方面技术学习情况,本篇文章是我看完 mysql5.7 从入门到精通一本书及其看了不少技术大牛的博客和一些教学视频总结出来的,自我感觉应该是全网 mysql 性能优化总结得最好的一篇文章,没有之一,哈哈哈,不接受反驳。

如果觉得好看,请给个赞

  • 你有一个思想,我有一个思想,我们交换后,一个人就有两个思想
  • If you can NOT explain it simply, you do NOT understand it well enough

简单介绍下这篇文章的流程

1. 索引是什么?为什么使用索引


A:那还用说,肯定在某些方面有特长呗,比如你知道的【它很快,非常快】

我也很赞同这个答案,但说的不够具体,你得说明它为啥这么快

如果问你选择索引的原因就是一个【快】字,面试也就不会出那么多幺蛾子了。你有没有问过你自己

  1. 索引在所有场景下都是快的吗?
  2. 知道它很快,何为快?怎样度量?

索引 (翻译官方文档)是帮助 MySQL 高效获取数据的排好序的数据结构
拿汉语字典的目录页(索引)打比方,我们可以按拼音、笔画、偏旁部首等排序的目录(索引)快速查找到需要的字。

实际上,索引也是一张表,该表保存了主键与索引字段,并指向实体表的记录。

2. 索引数据结构详解


在创建索引时,通常采用的数据结构有:Hash、二叉树、红黑树、B 树以及 B + 树 可以在线查看数据结构的网页 Data Structure

二叉树:

定义规则为左边节点值比根节点小,右边节点值比根节点大,并且左右子节点都是排序树

要是索引采取这种结构,数值递增那种,就要满足右边节点值比根节点大,导致检索数据会导致查了 6 遍磁盘

红黑树:

(在 jdk8 之后,用数组 + 链表 + 红黑树来实现 hashmap,当碰撞的元素个数大于 8 时 & 总容量大于 64,会有红黑树的引入。)红黑树是一种自平衡二叉树,主要解决二叉搜索树在极端情况下退化成链表的情况,在数据插入的时候同时调整整个树,使其节点尽量均匀分布,保证平衡性,目的在于降低树的高度,提高查询效率。(右边的树的高度不会大于左边树的高度超过 1,大于等于 1 级后会自动平衡,自己可在数据结构上插入试试)

特点:

  1. 节点是红色或者黑色
  2. 根节点是黑色
  3. 每个叶子的节点都是黑色的空节点(NULL)
  4. 每个红色节点的两个子节点都是黑色的
  5. 从任意节点到其每个叶子的所有路径都包含相同的黑色节点
  • 优点:解决二叉搜索树的极端情况的退化问题。
  • 缺点:检索时间依旧与树的高度有关,当数据量很大时,树的高度就会很高,检索的次数就会比较多,检索的时间会比较久,效率低。
正文完
 0