Mysql的数据引擎是表级别的
- MyISAM索引实现(非聚集)
MyISAM的数据文件和索引文件是分开的,在mysql的文件中分为。
1.frm 表结构文件
2.MYD 表数据文件
3.MYI 索引文件
- Innodb索引实现(聚集)
Innodb的数据文件和索引文件是合并在一起的。在mysql的文件中分为:
1.frm 表结构文件
2.ibd 数据+索引文件
索引存储方式对比:
- MyISAM索引
叶子节点存储的是数据的指针
根据需要查找的值经过b+tree查找到对应数据的指针,用指针去数据文件中定位对应数据
- Innodb索引
主键索引:
叶子节点存放的是数据
非主键索引:
叶子节点存放的是当前索引对应的主键id
总结:innodb引擎的表必须要有主键,最好是连续自增长的主键,MyISAM无此要求
因为索引的结构所以,在建立索引时,需要建立在变化较小的字段上,减少索引重组。