Mysql 索引

发布时间 2023-12-28 17:20:46作者: 爱新觉罗LQ

Mysql 索引

1. 索引介绍

一种用于快速查询和检索数据的数据结构,本质:一种排序好的数据结构
索引底层数据结构存在很多类型,常见的索引结构有:B树、B+树和 Hash、红黑树。在 Mysql 中,无论是 Innodb 还是 Myisam,都使用了 B+ 树作为索引结构

2. 优缺点

  1. 优点
  • 加快 数据的检索速度
  • 通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性
  1. 缺点
  • 创建索引耗时,当 CUD 时,如果数据有索引,那么索引也需要动态修改,降低 SQL 执行效率
  • 索引也需要物理存储,也会耗费一定空间

但是,使用索引一定能提高查询性能么?

  • 大多数情况下,索引查询比全表查询要快
  • 数据量不大时,提升不明显

3. 索引底层结构选型

Hash

不支持顺序和范围查询

二叉查找树 BST

非常依赖平衡程度

自平衡二叉查找树 AVL

AVL 树的特点:左右高度差不超过 1 ===> 查找、插入、删除复杂度都是 O(logn)
缺点;

  • 频繁地进行旋转来操作来保持平衡
  • 每个树节点仅存储一个数据,而每次进行磁盘 IO 时,只能读取一个节点的数据,如果需要查询的数据分布在多个节点上,那么就需要进行多次磁盘 IO

红黑树

B树 和 B+ 树

B 树也称 B-树,全称为 多路平衡查找树 ,B+ 树是 B 树的一种变体。B 树和 B+树中的 B 是 Balanced (平衡)的意思。

B 树& B+树两者有何异同呢?

  • B 树的所有节点既存放键(key) 也存放数据(data),而 B+树只有叶子节点存放 key 和 data,其他内节点只存放 key。
  • B 树的叶子节点都是独立的;B+树的叶子节点有一条引用链指向与它相邻的叶子节点。
  • B 树的检索的过程相当于对范围内的每个节点的关键字做二分查找,可能还没有到达叶子节点,检索就结束了。而 B+树的检索效率就很稳定了,任何查找都是从根节点到叶子节点的过程,叶子节点的顺序检索很明显。
  • 在 B 树中进行范围查询时,首先找到要查找的下限,然后对 B 树进行中序遍历,直到找到查找的上限;而 B+树的范围查询,只需要对链表进行遍历即可。

综上,B+树与 B 树相比,具备更少的 IO 次数、更稳定的查询效率和更适于范围查询这些优势。

4. 索引类型总结