01-存储引擎
存储引擎是形容表的:不同的存储引擎对应的表结构不一样
MyISAM存储引擎表结构:MyISAM索引文件和数据文件是分离的(非聚集索引)
-
MySQL Server 8.0
sdi:Serialized Dictionary Information的缩写: 表的元数据信息 -
MySQL Server 8.0之前:
frm文件:framework:存储表结构,框架
MYD文件:MyISAM+data:数据行记录
MYI文件:MyISAM+index:存储索引字段
InnoDB索引实现(聚集索引:叶节点包含了完整的数据记录)
表数据文件本身就是按B + Tree组织的一个索引结构文件
MySQL Server 8.0:只有ibd文件
MySQL Server 8.0之前:
frm文件:framework:存储表结构,框架
ibd文件:存放索引和数据文件
面试题:
为什么InnoDB表必须有主键,并且推荐使用整型的自增主键?
- MySQL数据结构为B+Tree,如果没有主键,无法存放数据
- 如果不指定主键,InnoDB会自动选择一个不重复的字段为该表主键。
- 如果表字段都有重复的,MySQL会再后台增加一个rowid字段(该字段看不到,但查询的时候还是按照该字段遍历),来维护表结构。
- 查询时整形之间遍历比较快,如果时字符串,会先转化成ASCII,再从左到右一个一个比对。
- 整形占用空间也比较小,占用资源少
为什么非主键索引结构叶子节点存储的是主键值?
- 一 致性和节省存储空间