作者:火鸟大叔 | 来源:互联网 | 2023-06-04 12:22
mysql两大主要引擎为myisam和innodb,那这两个引擎有什么区别呢?
我们先新建两个除了引擎不同其他完全相同的表。
磁盘文件:
MyIsam表的磁盘文件有三个,(以表名为 table_myisam 为例)
- table_myisam.frm (保存表结构: FoRM)
- table_myisam.MYI (保存索引 MYisam Index)
- table_myisam.MYD (保存数据 MYisam Data)
Innodb表的磁盘文件有三个,(以表名为 table_Innodb 为例)
- table_Innodb.frm (保存表结构 FoRM)
- table_Innodb.ibd (保存索引和数据 InoodB Data)
---------------------------------------------
数据存储
MyIsam:索引和数据是分离的,索引保存的是数据的物理地址(非聚簇索引),数据可以是离散的,如图:
(图片均来源网络)
Innodb:索引和数据是放在一块的,索引的叶子节点顺序保存了数据本身,而不是数据的物理地址(聚簇索引),如图:
---------------------------------------------
索引结构
当有多个索引时:
MyIsam:每个索引存储的都是数据的实际地址
优点:不管从什么索引搜索,都会直接定位到磁盘文件地址
缺点:当增删改数据时导致数据磁盘物理地址变更时,需要维护所有索引
Innodb:辅助索引上存储的是主键索引的值,也就是用非主键索引查找数据时,先通过辅助索引的值找到主键索引的值,再通过主键索引寻找数据,当无主键时,mysql自动创建一个隐藏的默认的6位整数作为主索引。
优点:当增删改数据时导致数据磁盘物理地址变更时不需要维护所有索引,大大减少了维护索引所花的时间
缺点:所有索引找到的是对应的主键值,需要再根据主键找实际数据。
点击这里查看博主其他博客