在mysql中的数据用各种不同的技术存储在文件或者内存中。这些技术都是用了不同的存储机制、索引技巧、锁定水平,最终给用户提供不同的选择。这些不同的技术以及配套的相关功能在mysql中被称为存储引擎(或者表类型)。

  各种存储引擎的特性

特点

Myisam

BDB

Memory

InnoDB

Archive

存储限制

没有

没有

64TB

没有

事务安全

 

支持

 

支持

 

锁机制

表锁

页锁

表锁

行锁

行锁

B树索引

支持

支持

支持

支持

 

哈希索引

 

 

支持

支持

 

全文索引

支持

 

 

 

 

集群索引

 

 

 

支持

 

数据缓存

 

 

 

支持

 

索引缓存

 

 

支持

支持

 

数据可压缩

支持

 

 

 

支持

空间使用

不消耗空间

内存使用

中等

非常高

批量插入速度

非常高

支持外键

 

 

 

支持

 

 

在mysql中配置有许多不同的存储引擎,用户可以灵活的选择适用于服务器、数据库和表格的存储引擎,以便获得最大的性能和最大的灵活性。这也是mysql不同于其他大型数据库以及mysql为何如此受欢迎的主要因素。一些大型的数据库仅采用了一种存储引擎,以一种尺码满足所有需求也就意味着会牺牲一些性能。

在命令行中可以通过命令显示其支持的存储引擎:

show engines;

在mysql中支持的存储引擎主要有MyISAM、CSV、MRG_MYISAM、BLACKHOLE、InnoDB、MEMORY、ARCHIVE…

(1)MyISAM Mysql的默认数据库,最为常用。拥有较高的插入,查询速度,但不支持事务

.frm: 存储表结构

.myd: 存储数据,MYData的缩写

.myi: 存储索引,MYIndex的缩写

(2)Inn0DB :事务型数据库的首选引擎,支持ACID事务,支持行级锁定

(3)BDB源自Berkeley DB,事务型数据库的另一种选择,支持COMMITROLLBACK等其他事务特性

(4)Memory :所有数据置于内存的存储引擎,拥有极高的插入,更新和查询效率。但是会占用和数据量成正比的内存空间。并且其内容会在Mysql重新启动时丢失

(5)Merge:将一定数量的MyISAM表联合而成一个整体,在超大规模数据存储时很有用

(6)Archive :非常适合存储大量的独立的,作为历史记录的数据。因为它们不经常被读取。Archive拥有高效的插入速度,但其对查询的支持相对较差

(7)Federated将不同的Mysql服务器联合起来,逻辑上组成一个完整的数据库。非常适合分布式应用Cluster/NDB :高冗余的存储引擎,用多台数据机器联合提供服务以提高整体性能和安全性。适合数据量大,安全和性能要求高的应用

(8)CSV逻辑上由逗号分割数据的存储引擎。它会在数据库子目录里为每个数据表创建一个.CSV文件。这是一种普通文本文件,每个数据行占用一个文本行。CSV存储引擎不支持索引。

(9)BlackHole:黑洞引擎,写入的任何数据都会消失,一般用于记录binlog做复制的中继


每种存储引擎都有各自的优势,不能笼统的说谁的性能更好,只有合适不合适。

(1)MyISAM存储引擎:主要用于管理非事物表,它提供了高速的存储与检索,以及全文搜索能力。该存储引擎插入数据快,但是空间和内存的使用效率较低。如果表主要适用于插入新纪录和读出记录,那么选择MyISAM存储引擎可以实现处理的高效率。

(2)InnoDB存储引擎:它主要用于事务处理应用程序,支持外键,同时还支持奔溃修复能力和并发控制。如果对事物的完整性要求比较高,要求实现并发通知,那么选择InnoDB存储引擎比较有优势。如果需要频繁的进行更新、删除操作,也可以选择该存储引擎,因为该存储引擎可以实现事物的提交和回滚。

(3)Memory存储引擎:Memory存储引擎提供“内存中”表,该存储引擎的所有数据都存储在内存中,数据的处理速度很快但是安全性不高。