理解Mysql底层B+tree索引机制

理解Mysql底层B+tree索引机制

初识Mysql体系结构

整体结构图

img

  • Connectors

    接入方支持协议很多

  • Management Serveices & Utilities

    系统管理和控制工具,例如:备份恢复,mysql复制集群等

  • Connection Pool

    连接池:管理缓冲用户连接、用户名、密码、权限校验、线程处理等需要缓存的需求

  • SQL Interface

    SQL接口:接受用户的SQL命令,并且返回用户需要查询的结果。比如select from就是调用SQL Interface

  • Parser

    解析器,SQL命令传递到解析器的时候会被解析器验证和解析。解析器是由Lex和YACC实现的。

  • Optimizer

    查询优化器,SQL语句在查询之前会使用查询优化器对查询进行优化

  • Cache和Buffer(高速缓存区)

    查询缓存,如果查询缓存有命中的查询结果,查询语句就可以直接去查询缓存中取数据。

  • Pluggable Storage Engines

    插件式存储引擎。存储引擎是MySql中具体的与文件打交道的子系统。也是Mysql最具有特色的一个地方。 Mysql的存储引擎是插件式的。

  • File System

    文件系统,数据、日志(redo,undo)、索引、错误日志、查询记录、慢查询等

运行时机理图

img

理解Mysql底层B+tree索引机制

写在前面的话

正确的创建合适的索引,是提升数据库查询性能的基础

索引是什么?

索引定义:

索引是为了加速对表中数据行的检索而创建的一种分散存储的数据结构

120421194082031

为什么要用索引?

索引意义:

​ 索引能极大的减少存储引擎需要扫描的数据量

​ 索引可以把随机IO变成顺序IO

​ 索引可以帮助我们在进行分组、排序等操作时,避免使用临时表

为什么是B+Tree?

二叉查找树、平衡二叉树、多路平衡查找树、加强版多路平衡查找树

详细了解上面的数据结构可以参见帖子

二叉查找树,Binary Search Tree

每个分支最多有两个(路)

120421194082038

平衡二叉查找树,Balance binary search tree

平衡二叉树(AVL树)在符合二叉查找树的条件下,还满足任何节点的两个子树的高度最大差为1。

先了解下磁盘的相关知识。

系统从磁盘读取数据到内存时是以磁盘块(block)为基本单位的,位于同一个磁盘块中的数据会被一次性读取出来,而不是需要什么取什么。

X < 10 --> P1
X = 10 --> 命中
X > 10 --> P2

120421194082041

一个磁盘块:

​ 绿色:关键字 (这里关键字就比如是id = 10)

​ 蓝色:数据区(比如图上为 id 为 10 整条

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值