首先要明白,在MySQL数据库忠中的存储引擎是基于表的,而不是基于数据库的。
讲述两者区别:
InnoDB 存储引擎,主要面向 OLTP(Online Transaction Processing,在线事务处理)方面的应用,是第一个完整支持 ACID 事务的存储引擎(BDB 第一个支持事务的存储引擎,已经停止开发)。
特点:
行锁设计、支持外键;
支持类似于 Oracle 风格的一致性非锁定读(默认情况下读取操作不会产生锁);
InnoDB 将数据放在一个逻辑的表空间中,由 InnoDB 自身进行管理。从MySQL4.1 版本开始,可以将每个 InnoDB 存储引擎的表单独存放到一个独立的ibd 文件中;
InnoDB 通过使用 MVCC(多版本并发控制:读不会阻塞写,写也不会阻塞读)来获得高并发性,并且实现了 SQL 标准的 4 种隔离级别(默认为 REPEATABLE 级别);
InnoDB 还提供了插入缓冲(insert buffer)、二次写(double write)、自适应哈希索引(adaptive hash index)、预读(read ahead)等高性能和高可用的功能;
InnoDB 采用了聚集(clustered)的方式来存储表中的数据,每张标的存储都按主键的顺序存放(如果没有显式的在建表时指定主键,InnoDB 会为每一行生成一个 6 字节的 ROWID,并以此作为主键);
InnoDB 表会有三个隐藏字段:除了上面提到了 6 字节的 DB_ROW_ID 外,还有6 字节的B_TX_ID(事务 ID)和 7 字节的 DB_ROLL_PTR(指向对应回滚段的地址)。这个可以通过 innodb monitor 看到;
MyISAM 存储引擎是 MySQL 官方提供的存储引擎,主要面向OLAP(Online Analytical Processing,在线分析处理)方面的应用。
特点:
不支持事务,支持表所和全文索引。操作速度快;
MyISAM 存储引擎表由 MYD 和 MYI 组成,MYD 用来存放数据文件,MYI 用来存放索引文件。
MySQL 数据库只缓存其索引文件,数据文件的缓存交给操作系统本身来完成;
MySQL5.0 版本开始,MyISAM 默认支持 256T 的单表数据;
最后总结一下:
1、InnoDB支持事物,而MyISAM不支持事物;
2、InnoDB支持行级锁,而MyISAM支持表级锁;
3、InnoDB支持MVCC, 而MyISAM不支持;
4、InnoDB支持外键,而MyISAM不支持;
5、InnoDB不支持全文索引,而MyISAM支持。