第十章:第2节 MySQL进阶篇——MyISAM和InnoDB两种存储引擎的表的文件构成

更新于:2017-08-09 11:31:35

在MySQL中,索引属于存储引擎级别的概念,不同存储引擎对索引的实现方式是不同的,接下来主要讨论MyISAM和InnoDB两个存储引擎的索引实现方式。


大家去打开你本地MySQL安装的目录


1.png

这是楠神本地的MySQL安装目录,里面有个data目录,顾名思义data目录里肯定是装数据的。MySQL所有表的数据都存放在这。


1.png

里面有很多文件夹,是这样的,你MySQL上有多少个数据库,这里相应地就有一个同名的文件夹。


1.png

点击进去一个文件夹,里面会有如下的几种后缀文件:

*.frm、*.MYD、*.MYI、*.ibd


这些文件各代表什么意思?


假如数据库a里有一张表b,它是MyISAM存储引擎


data\a中会产生3个文件:

b.frm :描述表结构文件,字段长度等,其实就是表的定义文件。

b.MYD(MYData):"D"数据信息文件。

b.MYI(MYIndex):"I"索引信息文件。


从数据文件我们应该知道了,MyISAM存储引擎 数据 与 索引 是完全分开的。


假如数据库a里有一张表c,它是InnoDB存储引擎


data\a中会产生1个或者2个文件:

c.frm :描述表结构文件,字段长度等,其实就是表的定义文件。

如果采用独立表存储模式,data\a中还会产生c.ibd文件(存储数据信息和索引信息)。

如果采用共享存储模式的,数据信息和索引信息都存储在data\ibdata1文件中。


查看一下是共享表空间,还是独立表空间,可用SQL语句:


show variables like '%per_table%';

1.png


如果是OFF,肯定不是独立表空间。如果是ON的话,也不一定是独立表空间。最直接的方法就是查看硬盘上的文件,独立表空间,每个表都对应了一个空间。


如果不想所有的表共享存储,可在MySQL的配置文件修改配置


innodb-file-per-table=1


不管是独立存储还是共享存储,有一点我们要明确地知道,InnoDB存储引擎 数据 与 索引 是在一个文件里的。


有了这节内容的初步了解,下节讨论两种存储引擎索引的实现方式。