数据库引擎MyISAM和Innodb对比与说明
- 一、什么是MyISAM和Innodb?
- 二、对比不同点
- 1、存储结构上的不同:
- 2、主外键的支持
- 3、事务:
- 4、锁:
- 5、索引:
一、什么是MyISAM和Innodb?
它们是数据的一种引擎,作用就是帮助用户管理数据库,不用的引擎就代表着不同的管理方式与特点,也就意味着在数据的许多方面,例如索引的管理,事务等方面都有不同。
Mysql数据库在5.5版本以前采用的是MyISAM的引擎,不过在此之后默认采用的是Innodb引擎,二者之间各有优劣,适用于不同的场景,不过在简单的使用中,可以这样理解,当下默认的使用引擎,自然要比以前的老版本好一些。
二、对比不同点
1、存储结构上的不同:
MyISAM
MyISAM的存储分为三个文件,frm(记录了表的结构)、MYD(记录了数据) 、MYI(记录了表的索引)
Innodb
Inndodb依据存储方式,存储结构也不同;
- 只有表结构文件和数据文件;
- 存储方式有两种,分别是:共享表空间、多表空间;
- 共享表空间:所有的数据文件和索引文件都保存在一个表空间中;
- 多表空间:每个表都有一个自己的表空间用于存储数据和索引;
2、主外键的支持
MyISAM
不支持外键,允许没有主键;
Innodb
支持外键,必须有主键,没有指定主键的时候,会默认生成长度为6字节的主键。
3、事务:
MyISAM
不支持事务;
Innodb
支持事务,同样事务的安全、回滚等等都会体现;
4、锁:
MyISAM
仅支持表级锁;
Innodb
支持行级锁,所以在并发性方面比较好;但是行级锁仅仅是使用在where子句对主键筛选的时候才生效,非主键的where仍然是锁全表,锁全表也就意味着并发性能降低了;
5、索引:
前置基础知识补充辅助索引
:又称为二级索引,即非主键索引,例如:唯一索引、普通索引、前缀索引等;
InnoDB 主键索引属于聚簇索引,其它索引属于非聚簇索引;MyISAM 的索引都是非聚簇索引。
两个引擎共同点说明:
二者的索引的实现都是B+树,注意:B+树是一种数据结构。非叶子仅仅存储的是叶子节点的位置,叶子节点存储了我们实际需要的数据内容(主键或者主键+表数据行);
MyISAM
叶子节点保存的是存储的数据的物理地址;主键索引的key值必须唯一;辅助索引的key值则可以重复;
Innodb
主键索引叶子节点key值是数据记录的主键,data域是完整的数表据记录;辅助索引保存的是数据记录的主键。