1.MyISAM的索引方式都是非聚簇的,InnoDB包含1个聚簇索引是不同的
2.MyISAM的表在磁盘上存储在以下文件中: *.sdi(描述表结构) , *.MYD(数据) , *.MYI(索引)
InnoDB的表在磁盘上存储在以下文件中: .ibd(表结构,索引和数据都存在一起)
3.在InnoDB存储引擎中, 我们只需要根据主键值对聚簇索引进行一次查找就能找到对应的记录, 而在MySAM中却需要进行一次回表操作, 意味着MylSAM中建立的索引相当于全部都是二级索引
4.InnoDB的数据文件本身就是索引文件, 而MylSAM索引文件和数据文件是分离的, 索引文件仅保存数据记录的地址
5.InnoDB的非聚簇索引data域存储相应记录主键的值, 而MylSAM索引记录的是地址, 而MylSAM索引文件和数据文件是分离的, 索引文件仅保存数据记录的地址
6.MylSAM的回表操作是十分快速的, 因为是拿着地址偏移量直接到文件中取数据的, 反观InnoDB是通过获取主键之后再去聚簇索引里找记录, 虽然说也不慢, 但还是比不上直接用地址去访问
7.InnoDB要求表必须有主键(MylSAM可以没有). 如果没有显示指定, 则MySQL系统会自动选择一个非空且唯一标识数据记录的列作为主键. 如过不存在这个列, 则MySQL自动为InnoDB表生成一个隐含字段作为主键, 这个字段长度为6个字节, 类型为长整型

文章对比了MyISAM和InnoDB两种MySQL存储引擎在索引方式、文件存储结构以及查找效率上的区别。MyISAM的索引是非聚簇的,数据分别存储在.MYD和.MYI文件中,而InnoDB使用聚簇索引,数据和索引一同存储在.ibd文件中,且InnoDB要求存在主键。InnoDB的索引结构导致其查找过程涉及主键搜索,而MyISAM的回表操作更快,因为它直接通过地址访问数据。

417

被折叠的 条评论
为什么被折叠?



