Mysql 的架构主要分三个层次,第一层是客户端(client),第二层是Mysql所提供的Server层,里面包括连接器、分析器、优化器、执行器,第三层是存储引擎
MysqlServer层
连接器:提供客户端与服务器之间的连接服务;
分析器:对sql语句进行词法分析和语法分析,然后对关键字进行切分,最终得到 AST(抽象语法树);
优化器:优化器是分两种方式的,一种叫RBO(基于规则的优化),一种叫CBO(基于成本的优化),而大部分都是使用的CBO方式;
执行器:执行器是用来跟存储引擎进行数据交互的,从存储介质中读取或写入数据,要提高效率就要减少IO量,减少IO次数;
在8.0版本之前,在Mysql的Server中还有一个组件叫做“缓存”,或者叫做查询缓存,但在8.0之后就被废弃掉了。
存储引擎
不同的存储引擎,数据文件和索引文件存放的位置是不同的,因此有了分类:
聚簇索引:数据和文件放在一起:InnoDB
.frm:存放的是表结构
.ibd:存放数据文件和索引文件
注意:Mysql的InnoDB存储引擎默认情况下会把所有的数据文件放到表空间中,不会为每一个单独的表保存一份数据文件,如果需要将每一个表单独使用文件保存,设置如下属性:
set global innodb_file_per_table = on;
非聚簇索引:数据和索引单独一个文件:MyISAM
.frm存放表结构
.MYI:存放索引数据
.MYD:存放实际数据
网友评论