MySQL底层执行原理
2022-05-23 10:35:32 17 举报
登录查看完整内容
mysql
作者其他创作
大纲/内容
age
Lilei30dev
Alice
18
memory
15
37
34
45
2020-02-01
保存的是写操作最终的结果集
Tom
...
AstTree
statement
Ice25dev
name
t1表(10条数据)
Redo log Buffer
Jim
引擎层
Bob
优化器选择小表为驱动表
Eric
由独立的模块组成相当于一个List循环解析Token
40
myisam
20
Innodb
加载
91
50
23
Bill31dev
Buffer Pool
查找
InnDB存储引擎
undo日志文件
Page
词法分析
Zark
Secondary Key
statement和row的混合操作
结束
开始
0x23
myisam引擎底层结构myisam的默认底层结构为B+Tree,为非聚簌索引,即在节点仅保存存放数据的地址值,每次通过索引找到对应值,然后通过节点保存的地址值找到磁盘中的数据
客户端
2020-06-01
mix
执行器开始执行的时候,要先判断一下你对这个表有没有执行查询的权限,如果没有,就会返回没有权限的错误,(在工程实现上,如果命中查询缓存,会在查询缓存返回结果的时候,做权限验证).执行器调用引擎接口(默认为InnDB),取表中的第一行,判断id是否等于1,是则保存到结果集中,一行完成后,调用下一行,以此类推知道最后一行,返回结果集给客户端。
25
0x89
3.更新内存数据
35
Server层
保存的是写操作的sql语句
Old Page
30
0x12
5
Block Nested-Loop Join算法把驱动表的数据读入到 join_buffer 中,然后扫描被驱动表,把被驱动表每一行取出来跟 join_buffer 中的数据做对比。过程:1.把 t1 的所有数据放入到 join_buffer 中2.把 t2 的数据一条一条拿出来对比3.拿到符合条件的数据结论:t1表IO 10次,t2表IO10000次,剩余的对比均在内存中
磁盘文件(ibd)
Nested-Loop Join算法span style=\"font-size: inherit;\
Bill32dev
Lilei30mgr
id
未分析出语法错误
Rose
分析机
Woo
Primary Key
Nested-Loop Join算法
分析token
Bill30dev
4.写Redo日志
联合索引
连接器
语法分析
词法分析器
2.写入更改数据的旧值以便回滚
1.加载更改行所在的记录的整页数据到Buffer中
70
t2表(10000条数据)
2020-03-01
Block Nested-Loop Join算法
执行器
表关联中常见的两种算法
优化器优化器是在表里面有多个索引的时候,决定使用哪个索引;或者在一个语句有多表关联(join)的时候,决定各个表的连接顺序。
6.binLog日志写入磁盘中
优化器
0x10
MYI文件
MYD文件
redo日志文件
buffer
0x14
5.数据顺序写入Redo日志中
InnoDB引擎底层结构默认的结构为B+Tree,为聚簌索引,span style=\"font-size: inherit;\
查询缓存
Ivy22dev
bin-log
row
0x13
0 条评论
回复 删除
下一页