MySQL和大多数数据库不同,MySQL中有一个存储引擎的概念,针对不同的存储需求用户可以选择不同的存储引擎。插件式的存储引擎是MySQL数据库的一个重要特征。用户可以基于此选择如何存储和索引数据…

存储引擎概述

MySQL5.0之后提供了以下几种存储引擎MyISAMInnoDBBDBMemory,Merge,Example,NDB Cluster,CVS,Blackhole,Federated,其中只有InnoDB和BDB存储引擎支持事物,其他的几种存储引擎。在创建表的时候如果不指定存储引擎,那么会使用默认的存储引擎。MySQL5.5之前默认使用MyIASM存储引擎。在MySQL5.5之后默认使用InnoDB存储引擎。
查看默认的存储引擎:

1
show variables like '%table_type%';

查看数据库所支持的所有存储引擎:

1
show engines \G;

常用存储引擎对比:

特性 MyISAM InnoDB Memory
是否支持事物
是否支持B树索引
锁粒度 表锁 行锁 表锁
是否支持外键

MyISAM详解

MyISAM存储引擎不支持事务。其优势是访问速度快。所以如果一个表对事务没有要求,并且以Select为主。那么使用MyISAM存储引擎是比较合适的。例如系统的配置信息。情报信息(恶意IP)等等。每张MyISAM表在磁盘上存储三个文件

  1. frm文件(表的定义文件)
  2. MYD文件(表的数据存储文件)
  3. MYI文件(表的索引存储文件)

InnoDB详解

现在MySQL默认都是使用InnoDB存储引擎。他提供了很多非常有用的功能例如:行锁、事物、外键约束、自增ID。但是相比MyISAM存储引擎他会占用更多的磁盘来保留数据和索引。
InnoDB的数据和索引的两种存储方式:

  • 使用共享表空间存储。这种存储方式中表结构保存在.frm文件中。数据文件保存在innodb_data_home_dir中。索引文件保存在innodb_data_file_path中。
  • 使用多表存储空间。这种存储方式表结构保存在.frm文件中。表的数据和索引一起存储在.idb文件中。多表存储空间的文件没有大小限制。现在一般都配置使用多表空间存储。

Memory详解

Memory存储引擎的表数据文件存储于内存之中。但是表结构空间.frm文件存储于磁盘。他的优点是内存访问速度非常快,并且默认使用hash索引。缺点是一旦数据库关闭。表中的数据就会丢失。每个Memory类型的表都可以设置表数据量的大小。可以使用max_heap_table_size来配置。默认是16M。

如何选择适合业务类型的存储引擎

存储引擎 适应场景
MyISAM 对事务的完整性要求不高,以查询和插入操作为主的需求
InnoDB 对事务支持有要求,要求数据的修改必须有一致性。除了查询和插入还有很大更新的需求
Memory 快速获取访问结果。表数据量比较小。不要求数据持久化