谈谈mysql存储引擎 innodb和myisam区别!
他们两区别点非常多,记忆挺困难点。但核心设计理念不同。innnodb 更多考虑事务,做了数据一致性和原子性设计。而,myisam不支持事务仅需要考虑更快更好读取数据。
myisam
设计出发点
不支持事务,更多考虑数据读取性能
innodb
设计出发点
支持事务,更多考虑数据一致性原子性
myisam
特点
核心特点不支持事务,所以有以下特点
- 主键不是必须设置
- 不支持外键
- 仅支持表锁,不支持行锁
- 索引不同
- 有3个文件。 表结构、数据文件、索引文件
- b+树叶子节点存储数据文件指针
- 二级索引叶子节点存储数据文件指针
更好的读取数据性能
- 有一个变量保存表行总数。查询select count from table 将取出该值。
- 支持全文检索
innodb
特点
核心特点支持事务,更多考虑数据一致性原子性。所以有以下特点
- 必须要有主键,若未设置。mysql将为我们生成6byte长度的int类型的字段作为主键
- 支持外键
- 支持表锁还是支持行锁、间隙锁
- 索引不同
- 有2个文件,表结构、索引文件(索引和数据)
- 聚簇索引叶子节点存储主键id,非聚簇索引存储聚簇索引主键
读取数据性能不如myisam
1. 每条sql都自成一个事务,自动提交。有开销
2. 没有变量保存表总数。