程序员の奇妙冒险

返回
MySQL MySQL
2025-04-09 00:14 阅读:154 评论:0

MySQL数据库索引数据结构

索引的本质 索引是帮助mysql高效获取数据的排好序的数据结构 索引存储在文件里 索引结构 二叉树(红黑树:二叉平衡树) hash BTREE B-Tree与B+Tree B+Tree是B-Tree的变种 B-Tree 度-节点的数据存储个数 叶节点具有相同的深度 叶节点的指针为空 节点中的数据ke

索引的本质

  • 索引是帮助mysql高效获取数据的排好序的数据结构
  • 索引存储在文件里
  • 索引结构
    • 二叉树(红黑树:二叉平衡树)
    • hash
    • BTREE

B-Tree与B+Tree

  • B+Tree是B-Tree的变种
  • B-Tree
    • 度-节点的数据存储个数
    • 叶节点具有相同的深度
    • 叶节点的指针为空
    • 节点中的数据key从左到由递增排列
    • 叶子节点存储data
  • B+Tree
    • 非叶子节点不存储data,只有存储key,可以增大度
    • 叶子节点不存储指针
    • 顺序访问指针,提高区间访问的性能

InnoDB存储引擎

  • InnoDB是事务型数据库的首选引擎,支持事务安全表(ACID),支持行锁定和外键
  • 锁的颗粒度:行锁
  • 支持索引

MyISAM存储引擎

  • 不支持事务操作
  • 不支持外键
  • 支持索引
  • 锁的颗粒度:表锁(限制了读/写工作负载的性能)
  • 因此它通常用于 Web 和数据仓库配置中的只读或以读取为主的工作负载

MyISAM 索引实现

  • MyISAM索引文件和数据文件是分离的
  • 先在B+Tree索引文件中查找数据指针,再根据数据指针到数据文件中查找数据

InnoDB 索引实现

  • InnoDB索引和数据是存储在一起的
  • 表数据文件本身就是按B+Tree组织的一个索引结构文件

为什么不用二叉树

  • 索引结构如果使用二叉树,二叉树存储数据深度会越来越深,最终还是会遇到性能瓶颈
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
// 不是平衡二叉树
// 1
// \
// 2
// \
// 3
// \
// 4
// \
// 5
 
 
// 不是完全二叉树,但是平衡二叉树
// 1
// / \
// 2 3
// /\ \
// 4 5 6
// /
// 7
评论 (0)
暂无评论 来抢沙发吧~