前言

MySQL的核心就是存储引擎。

查询存储引擎

可以使用:

show engines

命令来查看MySQL存储引擎,输出结果为:

mysql的四种key mysql的四种引擎_存储引擎

MySQL为我们提供了这么多引擎,其中最重要、使用最广泛的是InnoDB,也是MySQL默认的存储引擎。图中Support:表示MySQL是否支持此引擎;Transactions:表示是否支持事务;XA:表示是否支持分布式事务;

在mysql中可根据具体情况,使用不同的存储引擎。

InnoDB存储引擎

1.InnoDB数据存储在表空间中,可以将每个表的数据和索引放在单独的文件中。

2.InnoDB采用MVCC支持高并发,并且实现了四个标准的隔离级别。其默认级别是"可重复读",并且通过间隙锁防止幻读。间隙锁不仅锁定查询涉及的行,还会对索引中的间隙进行锁定,以防止幻影行的插入。

3.InnoDB表是基于聚簇索引建立的。

4.InnoDB是事务型存储引擎,支持真正的热备份,是MySql默认的存储引擎。

MyISAM存储引擎

1.不支持事务,不支持崩溃后的安全恢复。

2.MyISAM会将数据存储在两个文件中:数据文件和索引文件。MyISAM表的存储上限为操作系统中单个文件的最大尺寸。

3.MyISAM对整张表加锁,而不是针对行。读取时加共享锁,写入时加排它锁。支持并发插入(在表有读取查询的同时,也可往表中插入新数据)。

4.MyISAM也支持全文索引,一种基于分词创建的索引。

 存储引擎的选择

大部分情况下,InnoDB是正确的选择。不建议混合使用多种存储引擎。选择存储引擎,优先考虑以下因素:

1.事务:如果需要支持事物,选择InnoDB。

2.备份:如果需要在线热备份,选择InnoDB。 

3.崩溃恢复:数据量大的时候MyISAM恢复速度较慢。因此即使不需要支持事务,很多人也会选择InnoDB引擎。

场景

1.日志:对插入速度要求较高,MyISAM比较适合,因为开销低并且插入速度非常快。如果对日志做分析报表,导致插入速度变慢,如何处理?(复制数据到备库,进行查询)

2.订单处理:InnoDB最佳选择,支持事务、外键

3.大数据量:3~5T之间,如果采用MyISAM,崩溃后的恢复就是噩梦。数据量上升到10T以上,需要建立数据仓库。infobright是不错的选择