InnoDB和MyIASAM的区别
文章目录
一、查看引擎的命令
- 查看所有存储引擎
show engines;
- 查看默认的存储引擎
show variables like ‘%storage_engine%’;
- 查看表的存储引擎
show table status like “xxx” ;
二、InnoDB和MyISAM对比
- 锁:InnoDB 支持行级锁和表级锁,默认为行级锁。MyISAM 只支持表级锁,在读时对所有相关的表采用共享锁,在写时采用排他锁。
- 事务:InnoDB 提供 事务支持 的高级数据库功能, 具有事务、回滚等的事务安全型表。MyISAM 强调性能,每次查询具有原子性,其执行速度比InnoDB更快,但是不提供事务支持。
- 外键:InnoDB支持外键。MyISAM不支持外键。
- 并发:InnoDB 支持 MVCC 来应对高并发事务,实现了四个隔离级别,默认REPEATABLE READ(可重复读)。
- 崩溃恢复:InnoDB 支持崩溃后的安全恢复,MyISAM不支持。
- 备份:InnoDB 支持热备份,MyISAM不支持。
- 数据存储:InnoDB的数据存储在表空间中,它是由一系列的数据文件组成,其数据文件本身就是索引文件。MyISAM则是分开存储索引和数据到索引文件和数据文件。
- 索引:InnoDB 是基于聚簇索引建立的,数据文件和索引绑在一起,必须要有主键,通过主键索引效率很高。辅助索引需要两次查询,先查询到主键,再通过主键查询到数据。MyISAM 是非聚集索引,数据文件是分离的,索引保存的是数据文件的指针,主键索引和辅助索引是独立的。
- 全文索引:MySQL 5.6 及以后,MyISAM 和 InnoDB 存储引擎均支持全文索引。
- 其它:InnoDB 不保存表的总行数,执行 select count(*) from table 时需要全表扫描。MyISAM 用一个变量保存表的总行数,查总行数速度很快。<