目录:
1、存储引擎介绍
2、InnoDB及MyISAM性能对比
3、MyISAM和InnoDB的锁对比
4、两种存储引擎索引对比
1 存储引擎介绍
说明:基于5.7.19的MySQL数据库。
图1.1 数据库版本
在Navicat for MySQL中进行测试:
输入sql:show engines;
图1.2 存储引擎类别
参数说明:
Engine:存储引擎名称
Support:MySQL是否支持该引擎
Comment:对该引擎的说明
Transaction:是否支持事务处理
XA:是否分布式交易处理XA规范
Savepoints:是否支持保存点,以便事务回滚到保存点
l InnoDB
适用于高性能和事务处理环境,支持外键,默认的存储引擎,“拆包即用”。
l MyISAM
适用于以只读为主的数据仓库、电子商务和企业应用中。MyISAM使用高级缓存和索引机制提高数据检索和索引速度,但不支持事务,不支持外键。
l Blackhole
适用于测试应用程序确实在写数据而又不希望在磁盘上存储任何数据的场景。Blackhole存储引擎满足一个特定的需求,如果启用了二进制日志,SQL语句将被写入日志,将Blackhole存储引擎作为复制拓扑中的中继或代理。在这种情况下,中继代理处理来自master的数据,并将这些数据发送到它的slave上去,但是它本身并不存储任何数据。
l CSV
适用于写CSV日志文件,将结构化业务数据快速导入电子表格。CSV存储引擎以表格形式创建、读取和写入逗号分隔值(CSV)文件。不提供任何索引机制,在存储和转换日期时间值时也存在某些问题,存储数据的效率不高,因此应该谨慎使用。
l Memory
适用于频繁访问而很少更改的静态数据的情况,例如邮编列表、省市区列表、分类列表等等,以及适用于利用快照技术访问分布数据或历史数据的数据库。Memory(有时被称为HEAP)是内存中的存储器,使用哈希机制检索频繁使用的数据,从而检索更快。由于数据存储在内存中,只在MySQL会话中有效,关机时数据被刷新并删除。
l Federated
适用于分布式或数据集环境。Federated存储引擎允许将多个数据库服务器的表连接起来。它不移动数据,也不要求远程表适用相同的存储引擎。目前Federated存储引擎在MySQL的大部分发行版中是禁用的。
l Archive
适用于存储和检索大量的很少访问的存档或历史数据。Archive存储引擎以压缩格式存储大量数据,不支持索引,只能通过表扫描访问。
l MRG_MYISAM
适用于非常大的数据库应用,如数据仓库,其中数据存储在一个或多个数据库的多个表中。MRG_MYISAM存储引擎的最优的特点就是快速,它将一个大表分割成许多不同的小表,存储在不同的磁盘上,把这些小表合并,然后同时访问它们,搜索和排序执行得更快,因为每个小表需要管理的数据变少了。
缺点:
l 必须使用相同的MyISAM表组成一个合成表;
l 替换操作不可用;
l 索引比单表的索引效率低。
2 InnoDB及MyISAM性能对比
说明:测试表中含有36个字段,并含有988218条记录。
InnoDB存储引擎的测试数据库名为Innodbtest,其中含有该表,表名为Innodbtable;MyISAM存储引擎的测试数据库名为Myisamtest,其中含有该表,表名为Myisamtable。
在MySQL中分别使用InnoDB及MyISAM存储引擎对该表进行测试,首先进行前期工作:
(1)将测试MyISAM存储引擎的表的存储引擎从默认的InnoDB修改为MyISAM:
alter table myisamtable engine=myisam;