
说明:1.mysql8.0之后查询缓存已经删除,不再考虑
2.mysql5.5之后默认引擎为innodb,myisam基本不再使用
3.存储引擎:不同的数据文件在磁盘的不同组织形式
xx.frm:表结构数据(mysql8.0已取消)
xx.ibd:innodb, 表实际数据文件+数据索引文件,mysql8.0之后增加序列化字典信息(Serialized Dictionary Information,SDI),SDI被写在.ibd文件内部,它是数据字典包含的信息的一个冗余副本,作用类似于frm文件(表结构)
xx.MYD:myisam 表实际数据
xx.MYI :myisam 数据索引文件
局部性原理:mysql会根据局部性原理进行磁盘预读。
时间局部性:被访问过的数据,很可能被再次访问
空间局部性:数据与程序有聚集成群的倾向,我们希望将具备同一特性的数据放在同一空间,
磁盘预读:磁盘与内存进行数据交互时最小的逻辑单位称之为页,datapage,大小4kb 或8kb,与操作系统有关系,innodb默认16kb,大小可以修改,sql查看命令: show variables like ‘innodb_page_size’
索引:索引是存放在磁盘中的(防止断电导致内存消失),每次mysql启动会将索引分块加载到内存中。索引数据以K-V格式存储,key:索引字段的真实值。 value:整行数据(存储位置,地址,偏移量)
扩展信息:
存储引擎常用类型
innodb:数据结构B+树,也支持自适应hash
myisam:数据结构B+树
memory:数据结构hash索引
hash索引问题:
1.需要好的hash算法保证散列足够均匀,否则1.存储空间浪费,2产生hash冲突(hash碰撞)
2.hash表无序,在范围查询时需要逐个遍历,效率低
3.hash表不适于分块读取,所有数据放在内存中需要占用大量内存空间