MySQL系列:储存引擎

概述

主要关注 MyISAM 和 InnoDB

对比项 MyISAM InnoDB
外键 不支持 支持外键
事务 不支持 支持事务
行表锁 表级锁,即使操作一条记录也会锁住整张表,不适合高并发操作 行级锁,数据更新时只锁某一行,不对其他行有影响,适合高并发操作
注意:数据插入时使用表锁
缓存 只缓存索引,不缓存真实数据 不仅缓存索引还要缓存真实数据,対内存要求较高,而且内存大小対性能有决定性影响
表空间 大,分为段->区->页(页大小 16KB)
页读入到内存匹配,读入一条记录和读入一页 (包括很多条记录)的 I/O 时间是一样的
关注点 性能 行级锁,事务,外键,ACID 约束,热备份和容灾,MVCC,聚集索引
应用场景 处理速度快,适合查询密集,占用空间小
不支持事务等特性,只支持表级锁
丰富的特性,高并发,适合更新密集,二次查找,读写效率差,占用空间大

InnoDB

InnoDB 使用的存储方式是聚簇索引,每个表有且仅有一个聚簇索引。

聚簇索引指不仅缓存索引还缓存真实数据。InnoDB 默认使用主键顺序 (可自定义索引)为行记录构建一颗 B+ 树。

聚簇索引的存储并不是物理上连续的,而是逻辑上连续的,叶子结点间按照主键顺序排序,通过双向链表连接。

非聚簇索引
也称为二次索引、辅助索引,同样是一棵 B+ 树,通过非聚簇索引查找主键,再通过主键 (作为索引)去聚簇索引内查找行记录。InnoDB 经过二次查找才可定位到行记录。

MyISAM

MyISAM 是顺序存储的,B+ 树叶节点存放的是行记录的物理地址,定位速度快

  • 同一数据库不同的表可以使用不同存储引擎,查询密集的表使用 MyISAM,临时表使用 Memory
  • 不同服务器的数据库可以使用不同存储引擎,读写分离场景,从数据库可以使用 MyISAM,提高查询速度
posted @ 2022-03-26 22:20  当康  阅读(30)  评论(0编辑  收藏  举报