自学内容网 自学内容网

简单说说mysql中一条读sql是如何执行的

在server层

会先【查询缓存】,

如果有,则直接返回

如果没有缓存,则会在分析器进行词法和语法的分析,如果存在语法错误,会在这一层进行报错

如果语法和词法都没有问题,则会在优化器进行优化,优化器主要是进行索引选择和多表关联的执行顺序选择。

在优化完成后,则走到执行器,执行器会先判断当前账号有没有表权限,如果没有,则会进行报错

如果有,则走存储引擎层进行查询。

在存储引擎层(已innodb为例,在RR隔离级别之下,同时认为是事务下的第一条查询)

如果是首次查询,会根据当前事务id生成一个read view

如果非首次查询,则会使用之前的一个read view

然后会根据当前的查询条件,选择的索引,以及选择的表关联顺序去查询数据

在查询到数据后,会根据read view 规则判断每一条数据是否可见

如果可见,则直接返回

如果不可见,会根据roll_pointer 去undo log 中查找其他版本的记录,

接着会将undo log 中的数据去对比read view 规则,直至查询到可见的数据

TIP:关于read view 请参考另一篇博文:简单说说mysql的mvcc-CSDN博客


原文地址:https://blog.csdn.net/sjdxx/article/details/142826936

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!