1 概述
引擎是一个程序的核心组件,数据库存储引擎是指表的类型以及表在计算机上的存储方式。存储引擎的概念是MySQL的特点,不同的存储引擎决定了MySQL数据库中的表可以用不同的方式来存储。MySQL中的存储引擎有很多种,可以通过“SHOW ENGINES”语句来查看。下面重点讲解InnoDB、MyISAM、MEMORY和ARCHIVE这四种。
2 InnoDB存储引擎
在MySQL从3.23.34a开始包含InnnoDB,并且自5.5之后将其作为默认引擎。在MySQL之后的发展中不断地提升优化InnerDB,该引擎的主要特点包括以下:
1> 支持4中级别的事务。默认的事务隔离级别是可重复读(Repeated Read)。
2> InnerDB使用行级锁。
3> 该引擎下的表,数据的物理组织形式为簇表,数据通过主键组织(聚簇索引),即主键与数据在一起,按主键的顺序进行物理分布。在MySQL5.6之后InnerDB也支持了全文索引。
4> InnerDB实现了缓冲管理,不仅能缓冲索引,而且还能索引数据,并且自从创建散列索引以加快数据的读取。
5> 该引擎支持外键,能较好地保持数据的一致性。
6> 支持热备份,具有良好的容灾性。
3 MyISAM存储引擎
MyISAM是MySQL中常见的存储引擎,MySQL5.0/5.1时的默认存储引擎。该引擎是基于磁盘的,多用于文件来表现其组织。近年来,该引擎没有重要发展,并且存在一定的缺陷:不支持事务,容灾能力较差等。其特性如下:
1> 该引擎使用表级锁,所以并发性较差。
2> 该引擎支持全文索引。
3> 该引擎不支持事务。
4> 主机宕机时,MyISAM表易损坏,其容灾能力较差。
5> 只缓存索引,数据的缓存使通过操作系统缓冲区实现的。
6> 数据因凑存储,因此可以获得更小的索引和更快的全表扫描性能。
4 MEMORY存储引擎
MEMORY使用存储在内存中的内容来创建表,数据全部放在内存中,可以显著提高数据的访问速度,因此可以用来存放方位频繁的数据。其特性如下:
1> 该内存使用表级锁,因此如果频繁的读写,也是性能的瓶颈所在。
2> 该引擎只支持固定大小的行。
3> 不支持TEXT,BLOB字段,当表中存在这些字段时,会自动转换成MyISAM表,拉低性能。
4> 主机重启或宕机后内存停止会丢失数据
5 怎样选择存储引擎
以上三种引擎的特性比较如下图所示:
如何选择合适的引擎作为数据库使用的基础要根据业务场景、数据特点、数据存储需要等各方面去综合考虑:
1> 业务的应用过程中是否需要高并发,就需要考虑选择数据库的引擎的锁级别,行级锁的并发性能要远高于表级锁。
2> 数据的具体应用以及业务的繁杂处理是否需要用到数据库的事务支持等。
3> 数据的操作特点:如需要频繁更新、删除等就考虑InnerDB;数据量特别大但是单纯的数据增长则考虑使用MyISAM;数据量较小用于记录临时数据则选择Memory。
不同操作系统在采用线程和进程模型上有相当大的差异,UNIX/LINUX系统的编程模型对于MySQL软件的优化工作相较于Windows系统来说有较大的提升,选择合适的操作系统来部署MySQL数据库对于提升数据的使用性能也具有重大的意义。