数据库引擎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域是完整的数表据记录;辅助索引保存的是数据记录的主键。