后端存储10(执行计划)
2020-10-09 本文已影响0人
兮兮码字的地方
几乎所有的数据库的服务端,都可以划分为执行器 (Execution Engine) 和 存储引擎 (Storage Engine) 两部分。执行器负责计算(解析 SQL 执行查询),存储引擎负责保存数据。
一条 SQL 在数据库中执行,首先 SQL 经过语法解析成 AST,然后 AST 转换为逻辑执行计划,逻辑执行计划经过优化后,转换为物理执行计划,再经过物理执行计划优化后,按照优化后的物理执行计划执行完成数据的查询。
MySQL 非常牛的一点是,它在设计层面对存储引擎做了抽象,它的存储引擎是可以替换的。它默认的存储引擎是 InnoDB,在 InnoDB 中,数据表的物理存储结构是以主键为关键字的 B+ 树,每一行数据直接就保存在 B+ 树的叶子节点上(聚簇索引)。
在 InnoDB 中,表的索引也是以 B+ 树的方式来存储的,和存储数据的 B+ 树的区别是,在索引树中,叶子节点保存的不是行数据,而是行的主键值(非聚簇索引)。
通过普通索引来检索一条记录,需要先后查询索引树和数据树这两棵树:先在索引树中检索到行记录的主键值,然后再用主键值去数据树中去查找这一行数据。