在innodb存储引擎中数据是按照表空间来组织存储,表空间的表空间文件是实际存在的物理文件,每个表都有独立对应的文件,比较老的mysql 版本均为innodb_file_per_table= off ; 也就是所有innodb类型的库统一存放一个表空间中。innodb_file_per_table 建议打开,毕竟单文件ibddata文件不断的增大存储与共享, 将影响数据处理效率。如何查看当前表空间的存储方式?


以mysql 5.7 中mysql 库中的表为例:



可以看到user 表是MyISAM存储引擎,time_zone_transition_type 表就是InnoDB , time_zone_transition_type.idb 文件就是该表的独立表空间。
InnoDB的数据存储结构是:每一个表都有一个.frm文件存储表的定义信息,还有一个.ibd文件,其这个文件包括了单独一个表的数据内容以及索引内容,也就是2个文件来负责每一个独立的表;
MyISAM的数据存储结构是:每个MyISAM表在磁盘上都会存储成三个文件:其每一个文件的名字以表的名字开始,扩展名指出文件类型(作用),其中.frm文件存储表的定义信息;存放数据文件的扩展名为.MYD;存放索引文件的扩展名是.MYI ,也就是3个文件来负责每一个独立的表;
那么到底是不是这样,我们确认下,如下图:


通过上面的图示我们可以看出,2张表的引擎是不同的。


通过上面的图示我们可以看出,2张表的引擎是不同的。

