MySQL支持多种存储引擎,针对不同情况,可以选择使用不同的存储引擎来提高效率或者提供灵活的存储。等等,什么是存储引擎?
在MySQL中的,数据被各种不同的技术存储在文件或内存中,并利用不同的存储机制,索引机制,锁定水平等等来提供广泛而不同的功能。而这些不同的技术以及其相关功能在MySQL中被称为存储引擎。
MySQL支持的存储引擎有MyISAM, InnoDB, BDB, Memory Mergy, EXAMPLE, NDB,Cluster, ARCHIVE, CSV, BLACKHOLE, FODRATED等。InnoDB和BDB提供事务安全表,其他存储引擎都是非事务安全表。
特点 | MyISAM | BDB | Memory | InnoDB | Archive |
存储限制 | 无 | 无 | 无 | 64TB | 无 |
事务安全 |
| 支持 |
| 支持 |
|
锁机制 | 表锁 | 页锁 | 表锁 | 行锁 | 行锁 |
B树索引 | 支持 | 支持 | 支持 | 支持 |
|
Hash索引 |
|
| 支持 | 支持 |
|
全文索引 | 支持 |
|
|
|
|
集群索引 |
|
|
| 支持 |
|
数据缓存 |
|
| 支持 | 支持 |
|
索引缓存 | 支持 |
| 支持 | 支持 |
|
数据可压缩 | 支持 |
|
|
| 支持 |
空间使用 | 低 | 低 | N/A | 高 | 非常低 |
内存使用 | 低 | 低 | 中等 | 高 | 低 |
批量插入速度 | 高 | 高 | 高 | 低 | 非常高 |
支持外键 |
|
|
| 支持 |
|
常用引擎的简介:
(一)MyISAM:MySQL的默认引擎(MySQL5.5以后默认引擎为InnoDB)。不支持事务,不支持外键,但是插入,访问速度快。对事务完整性没有要求或者插入,查询语句为主的应用可以选择这种引擎。每个MyISAM在磁盘上存储成3个文件,其中文件名和表名都相同,但是扩展名分别为:.frm(存储表定义),MYD(MYData,存储数据),MYI(MYIndex,存储索引)数据文件和索引文件可以放置在不同的目录,平均分配IO,获取更快的速度。
(二)InnoDB:提供了具有提交,回滚和崩溃恢复的事务安全,事务型数据库的首选引擎。但是对比MyISAM,InnoDB写的操作效率差一点而且会占用更多的磁盘空间以保留数据和索引。
(三)Memory:memory使用存在内存中的内容来创建表,因为它的数据是存储在内存中的并且默认使用Hash索引,所以它拥有极快的插入,查询,更新速度。但是相对的会占用与数量成正比的内存空间,而且一旦服务器关闭,所以数据就会丢失,而表是存储在一个.frm文件里所以不会丢失。
(四)Merge:Merge实际上是一组MyISAM表的组合,Merge表中并没有数据。所有对Merge表的操作都会落实到内部的MyISAM表。在超大规模的数据存储很有用。
另外的引擎简介:
(一)Archive:非常适合存储大量的独立的,作为历史记录的数据。因为它们不经常被读取。Archive拥有高效的插入速度,但其对查询的支持相对较差
(二)Federated:将不同的Mysql服务器联合起来,逻辑上组成一个完整的数据库。非常适合分布式应用
(三)Cluster/NDB:高冗余的存储引擎,用多台数据机器联合提供服务以提高整体性能和安全性。适合数据量大,安全和性能要求高的应用
(四)CSV:逻辑上由逗号分割数据的存储引擎。它会在数据库子目录里为每个数据表创建一个.CSV文件。这是一种普通文本文件,每个数据行占用一个文本行。CSV存储引擎不支持索引。
(五)BDB:源自Berkeley DB,事务型数据库的另一种选择,支持COMMIT和ROLLBACK等其他事务特性
(六)BlackHole:黑洞引擎,写入的任何数据都会消失,一般用于记录binlog做复制的中继