Mysql索引介绍

1. 索引的本质

索引是帮助Mysql高效获取数据的排好序的数据结构

2. 索引的数据结构

二叉树:单边增长的场景会导致全表扫描。

image-20230228230316043

红黑树:相对平衡,比二叉树性能好,大数据下,红黑树的高度过高,会造成磁盘IO频繁。

image-20230228230321402

Hash

一次hash算法就可以定位到文件的位置,但存在缺点:

  • 不支持范围查找
  • 不支持排序

数据库如果比较大,只用到精确查找就可以用hash

B-tree:

  1. 特点:
  • 叶子结点具有相同的深度,叶子结点指针为空。
  • 所有索引元素不重复
  • 节点中的数据索引从左到右递增
  1. 如果使用了innoDb存储引擎,结点的data元素就可能存储的是除了索引外的其他所有列,会占用比较大的存储空间,对于一个大结点而言,可以存放的结点数量就会比较小

image-20230228230329788

B+tree(B-tree变种)

  1. 特点:

    • 非叶子结点不存储data ,只存储索引(冗余),可以存放更多的索引。
    • 叶子结点包含所有的索引字段。
    • 叶子结点用指针连接,提高区间访问的性能。

    image-20230228230339454

索引是怎么支持千万级表快速查找?

mysql建议一个结点大小为16kb,这样一次iO速度比较快,一个大结点下的一个索引元素大约是14b,所以一个大结点里面约有1170个索引元素,对于一个高度为3的b+树,可以存储16* 1170* 1170 = 2000万。


Mysql索引介绍
http://example.com/mysql索引介绍/
作者
Panyurou
发布于
2021年11月4日
许可协议