SQL一条语句的一生,mysql在8.0之后取消了程序缓存(影响性能),通过Parser(词法分析、语法分析)解析器和执行器,构建执行树,有执行器来执行。
逻辑架构
表在文件系统中的表示 2.3.1 InnoDB存储引擎模式
- 表结构
为了保存表结构, InnoDB 在 数据目录 下对应的数据库子目录下创建了一个专门用于 描述表结构的文 件 ,文件名是这样
表名.frm
.frm文件
的格式在不同的平台上都是相同的。这个后缀名为.frm是以 二进制格式 存储的,我们直接打开是乱码
的。
- 表中数据和索引
① 系统表空间( system tablespace)
默认情况下,InnoDB会在数据目录下创建一个名为 `ibdata1` 、大小为 12M 的文件,这个文件就是对应
的 系统表空间 在文件系统上的表示。怎么才12M?注意这个文件是 自扩展文件 ,当不够用的时候它会自
己增加文件大小。
当然,如果你想让系统表空间对应文件系统上多个实际文件,或者仅仅觉得原来的 `ibdata1` 这个文件名
难听,那可以在MySQL启动时配置对应的文件路径以及它们的大小,比如我们这样修改一下my.cnf 配置
文件
[server] innodb_data_file_path=data1:512M;data2:512M:autoextend
② 独立表空间(file-per-table tablespace)
在MySQL5.6.6以及之后的版本中,InnoDB并不会默认的把各个表的数据存储到系统表空间中,而是为 每 一个表建立一个独立表空间 ,也就是说我们创建了多少个表,就有多少个独立表空间。使用 独立表空间 来 存储表数据的话,会在该表所属数据库对应的子目录下创建一个表示该独立表空间的文件,文件名和表 名相同,只不过添加了一个 .ibd 的扩展名而已,所以完整的文件名称长这样:
表名.ibd
.ibd 文件就用来存储 test 表中的数据和索引。