Inndb和MyISAM在存储上的区别?
Innodb的存储文件有:
- .frm,表结构文件
- .ibd,数据和索引文件
MyISAM的存储文件有:
- .frm,表结构文件
- .myi,索引文件
- .myd,数据文件
Innodb
在Innodb中有新的概念叫聚集索引(聚簇索引)和非聚集索引,用主键建立的索引(B+树)叫聚集索引,而其它索引(也称二级索引或辅助索引)叫做非聚集索引。
主键索引所构造的B+树(聚集索引)的叶子节点包含了完整行记录(因为.ibd文件包含了数据和索引)。
如果建表时没有建立索引,那么Innodb默认建立一个id字段,用于生成聚集索引,这个是透明的。
对于二级索引的B+树(非聚集索引)的叶子节点只包含了主键值。
当使用二级索引查询时,如果需要查询的字段不包括主键字段,就需要用主键值,到聚集索引获取完整的行记录,这个过程叫回表查询。因此,指定字段名时只包含主键字段,到达不回表而直接返回,这个过程称为覆盖索引。
MyISAM
在MyISAM中没有聚集索引这个概念,其主键索引也好二级索引也罢,其B+数的叶子节点,都指向了节点对应的数据存储地址,即磁盘地址。因为数据被存放在.myd文件中,必须通过磁盘地址指向。
MyISAM不存在聚集索引、回表查询,更不存在覆盖索引的概念。