MySQL之2--存储引擎选择与比较
MySQL和大多数数据库不同,MySQL中有一个存储引擎的概念,针对不同的存储需求用户可以选择不同的存储引擎。插件式的存储引擎是MySQL数据库的一个重要特征。用户可以基于此选择如何存储和索引数据…
存储引擎概述
MySQL5.0之后提供了以下几种存储引擎MyISAM
,InnoDB
,BDB
,Memory
,Merge
,Example
,NDB Cluster
,CVS
,Blackhole
,Federated
,其中只有InnoDB和BDB存储引擎支持事物,其他的几种存储引擎。在创建表的时候如果不指定存储引擎,那么会使用默认的存储引擎。MySQL5.5之前默认使用MyIASM存储引擎。在MySQL5.5之后默认使用InnoDB存储引擎。
查看默认的存储引擎:
查看数据库所支持的所有存储引擎:
常用存储引擎对比:
特性 | MyISAM | InnoDB | Memory |
---|---|---|---|
是否支持事物 | 否 | 是 | 否 |
是否支持B树索引 | 是 | 是 | 是 |
锁粒度 | 表锁 | 行锁 | 表锁 |
是否支持外键 | 否 | 是 | 否 |
MyISAM详解
MyISAM存储引擎不支持事务。其优势是访问速度快。所以如果一个表对事务没有要求,并且以Select为主。那么使用MyISAM存储引擎是比较合适的。例如系统的配置信息。情报信息(恶意IP)等等。每张MyISAM表在磁盘上存储三个文件
- frm文件(表的定义文件)
- MYD文件(表的数据存储文件)
- 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 | 快速获取访问结果。表数据量比较小。不要求数据持久化 |
- Labels: MySQL