#青训营笔记创作活动# 1.21 day7
无论是读操作还是写操作,在SQL执行前都会做这些:
1. 获取一个数据库连接对象,首先尝试从连接池中获取连接,如果没有空闲连接的话,检查当前是否达到最大连接数,如果没有,则建立新连接;如果达到,则等待空闲连接。 建立新连接的过程需要经过3次握手等。
查询SQL的执行:
● 将SQL发送给SQL接口,SQL接口会对SQL语句进行哈希处理。
● ②SQL接口在缓存中根据哈希值检索数据,如果缓存中有则直接返回数据。
● ③缓存中未命中时会将SQL交给解析器,解析器会判断SQL语句是否正确:
● 错误:抛出1064错误码及相关的语法错误信息。
● 正确:将SQL语句交给优化器处理,进入第④步。
● ④优化器根据SQL制定出不同的执行方案,并择选出最优的执行计划。
● ⑤工作线程根据执行计划,调用存储引擎所提供的API获取数据。
● ⑥存储引擎根据API调用方的操作,去磁盘中检索数据(索引、表数据....)。
● ⑦发生磁盘IO后,对于磁盘中符合要求的数据逐条返回给SQL接口。
● ⑧SQL接口会对所有的结果集进行处理(剔除列、合并数据....)并返回。
其中读与写最大的区别在于写操作会有更多的日志记录。
无论是读操作还是写操作,在SQL执行前都会做这些:
1. 获取一个数据库连接对象,首先尝试从连接池中获取连接,如果没有空闲连接的话,检查当前是否达到最大连接数,如果没有,则建立新连接;如果达到,则等待空闲连接。 建立新连接的过程需要经过3次握手等。
查询SQL的执行:
● 将SQL发送给SQL接口,SQL接口会对SQL语句进行哈希处理。
● ②SQL接口在缓存中根据哈希值检索数据,如果缓存中有则直接返回数据。
● ③缓存中未命中时会将SQL交给解析器,解析器会判断SQL语句是否正确:
● 错误:抛出1064错误码及相关的语法错误信息。
● 正确:将SQL语句交给优化器处理,进入第④步。
● ④优化器根据SQL制定出不同的执行方案,并择选出最优的执行计划。
● ⑤工作线程根据执行计划,调用存储引擎所提供的API获取数据。
● ⑥存储引擎根据API调用方的操作,去磁盘中检索数据(索引、表数据....)。
● ⑦发生磁盘IO后,对于磁盘中符合要求的数据逐条返回给SQL接口。
● ⑧SQL接口会对所有的结果集进行处理(剔除列、合并数据....)并返回。
其中读与写最大的区别在于写操作会有更多的日志记录。
展开
评论
点赞