首先来回顾建表的过程,建表需要的内容有三个:表的结构、数据和索引。存储引擎直接影响这些内容的存储方式。
MyISAM :不支持事务、也不支持外键,索引采用非聚集索引,其优势是访问的速度快,对事务完整性没有要求,以 SELECT、INSERT 为主的应用基本上都可以使用这个存储引擎来创建表。
MyISAM的表在磁盘上存储成 3 个文件,其文件名都和表名相同,扩展名分别是:
.frm(存储表定义)
.MYD(MYData,存储数据)
.MYI (MYIndex,存储索引)
InnoDB 存储引擎 提供了具有提交、回滚和崩溃恢复能力的事务安全,支持自动增长列,外键等功能,索引采用聚集索引,索引和数据存储在同一个文件,所以InnoDB的表在磁盘上有两个文件,其文件名
都和表名相同,扩展名分别是:
.frm(存储表的定义)
.ibd(存储数据和索引)
MEMORY 存储引擎使用存在内存中的内容来创建表。每个MEMORY 表实际只对应一个磁盘文件,格式是.frm(表结构定义)。MEMORY 类型的表访问非常快,因为它的数据是放在内存中的,并且默认使用 HASH 索引(不适合做范围查询),但是一旦服务关闭,表中的数据就会丢失掉。
这个在上面的概念里其实也说到,因为文件不同。
可以使用 show engines;命令来查看自己数据库的存储引擎:

进入 var/lib/mysql/mysql下,红框表示 MyISAM存储引擎的文件,索引和数据是分开的,蓝框表示InnoDB存储引擎的数据跟索引一起存放的。

