几个常用存储引擎的特点
下面我们重点介绍几种常用的存储引擎并对比各个存储引擎之间的区别和推荐使用方式。
特点 | Myisam | BDB | Memory | InnoDB | Archive |
存储限制 | 没有 | 没有 | 有 | 64TB | 没有 |
事务安全 | | 支持 | | 支持 | |
锁机制 | 表锁 | 页锁 | 表锁 | 行锁 | 行锁 |
B树索引 | 支持 | 支持 | 支持 | 支持 | |
哈希索引 | | | 支持 | 支持 | |
全文索引 | 支持 | | | | |
集群索引 | | | | 支持 | |
数据缓存 | | | 支持 | 支持 | |
索引缓存 | 支持 | | 支持 | 支持 | |
数据可压缩 | 支持 | | | | 支持 |
空间使用 | 低 | 低 | N/A | 高 | 非常低 |
内存使用 | 低 | 低 | 中等 | 高 | 低 |
批量插入的速度 | 高 | 高 | 高 | 低 | 非常高 |
支持外键 | | | | 支持 | |
MySQL引擎 | 说明 |
MyISAM | 内存中只缓存索引,不缓存数据; 不支持事务; 只支持表级锁,支持insert操作和select操作并发进行; 适合读多写少的应用,如web; 支持全文索引; |
InnoDB | 索引和数据都可以缓存到内存中; 支持事务; 支持行级锁,可实现更高的并发度; 支持故障恢复; 支持外键约束; 支持4种不同的事务隔离级别; |
Memory | 所有数据均存在内存中,可提供高速的查询效率; 一旦重启数据库(包括死机),将丢失所有数据; 不支持blob和text类型; 数据大小必须小于内存容量; 其它特性类似于MyISAM; |
Merge | 将一系列等同的MyISAM表以逻辑方式组合在一起,并作为1个对象引用它们。 高并发时,会导致适用的文件句柄数剧增; 适用于数据仓储等环境。 |
Archive | 可将大量的数据压缩存储; 不支持索引; 支持insert和select,不支持delete, replace和 update; 支持行级锁; |
Federated | 能够将多个分离的MySQL服务器链接起来,从多个物理服务器创建一个逻辑数据库; 不支持事务; 不支持alter table等直接修改表结构的DDL操作; 不支持prepare语句; 不支持查询缓存; |
Blackhole | 不会存储任何数据,仅记录日志; 适用于日志统计、过滤、同步中间层等; |
CSV | 将数据以逗号分隔的格式存储在文本文件中; 不支持索引; |
最常使用的2种存储引擎:
1、Myisam是Mysql的默认存储引擎,当create创建新表时,未指定新表的存储引擎时,默认使用Myisam。
每个MyISAM在磁盘上存储成三个文件。文件名都和表名相同,扩展名分别是.frm(存储表定义)、.MYD (MYData,存储数据)、.MYI (MYIndex,存储索引)。数据文件和索引文件可以放置在不同的目录,平均分布io,获得更快的速度。 MyISAM管理非事务表。它提供高速存储和检索,以及全文搜索能力。如果应用中需要执行大量的SELECT查询,那么MyISAM是更好的选择。
该引擎还支持索引延迟更新,对于update速度较快。
2、InnoDB存储引擎提供了具有提交、回滚和崩溃恢复能力的事务安全。但是对比Myisam的存储引擎,InnoDB写的处理效率差一些并且会占用更多的磁盘空间以保留数据和索引。InnoDB用于事务处理应用程序,具有众多特性,包括ACID事务支持。如果应用中需要执行大量的INSERT或UPDATE操作,则应该使用InnoDB,这样可以提高多用户并发操作的性能。该引擎存储表基于聚簇索引建立,辅助索引会包含主键列,如果想在此表上建立很多索引,则应争取把主键建的小写。任何改变InnoDB表结构的操作,都会导致整个表的重建,包括重建所有的列,所以需要花费很长的时间。
如何选择合适的存储引擎
选择标准: 根据应用特点选择合适的存储引擎,对于复杂的应用系统可以根据实际情况选择多种存储引擎进行组合。下面是常用存储引擎的适用环境:
1、MyISAM:默认的MySQL插件式存储引擎,它是在Web、数据仓储和其他应用环境下最常使用的存储引擎之一
2、InnoDB:用于事务处理应用程序,具有众多特性,包括ACID事务支持。
3、Memory:将所有数据保存在RAM中,在需要快速查找引用和其他类似数据的环境下,可提供极快的访问。
4、Merge:允许MySQL DBA或开发人员将一系列等同的MyISAM表以逻辑方式组合在一起,并作为1个对象引用它们。对于诸如数据仓储等VLDB环境十分适合。
其他存储引擎介绍
MyISAM:默认的MySQL插件式存储引擎,它是在Web、数据仓储和其他应用环境下最常使用的存储引擎之
一。注意,通过更改STORAGE_ENGINE配置变量,能够方便地更改MySQL服务器的默认存储引擎。
InnoDB:用于事务处理应用程序,具有众多特性,包括ACID事务支持。
BDB:可替代InnoDB的事务引擎,支持COMMIT、ROLLBACK和其他事务特性。
Memory:将所有数据保存在RAM中,在需要快速查找引用和其他类似数据的环境下,可提供极快的访问。
Merge:允许MySQL DBA或开发人员将一系列等同的MyISAM表以逻辑方式组合在一起,并作为1个对象引用它们。对于诸如数据仓储等VLDB环境十分适合。
Archive:为大量很少引用的历史、归档、或安全审计信息的存储和检索提供了完美的解决方案。
Federated:能够将多个分离的MySQL服务器链接起来,从多个物理服务器创建一个逻辑数据库。十分适合于分布式环境或数据集市环境。
Cluster/NDB:MySQL的簇式数据库引擎,尤其适合于具有高性能查找要求的应用程序,这类查找需求还要求具有最高的正常工作时间和可用性。
Other:其他存储引擎包括CSV(引用由逗号隔开的用作数据库表的文件),Blackhole(用于临时禁止对数据库的应用程序输入),以及Example引擎(可为快速创建定制的插件式存储引擎提供帮助)。