MySQL 存储引擎简介
MySQL 支持数个存储引擎作为对不同表的类型的处理器. MySQL 存储引擎包括处理事务安全表的引擎和处理非事务安全表的引擎:
MyISAM 管理非事务表. 它提供高速存储和检索, 以及全文搜索能力. MyISAM 在所有 MySQL 配置里被支持, 它是默认的存储引擎, 除非你配置 MySQL 默认使用另外一个引擎.
MEMORY 存储引擎提供 "内存中" 表. MERGE 存储引擎允许集合将被处理同样的 MyISAM 表作为一个单独的表. 就像 MyISAM 一样, MEMORY 和 MERGE 存储引擎处理非事务表, 这两个引擎也都被默认包含在 MySQL 中.
注: MEMORY 存储引擎正式地被确定为 HEAP 引擎.
InnoDB 和 BDB 存储引擎提供事务安全表. BDB 被包含在为支持它的操作系统发布的 MySQL-Max 二进制分发版里. InnoDB 也默认被包括在所 有 MySQL 5.1 二进制分发版里, 你可以按照喜好通过配置 MySQL 来允许或禁止任一引擎.
EXAMPLE 存储引擎是一个 "存根" 引擎, 它不做什么. 你可以用这个引擎创建表, 但没有数据被存储于其中或从其中检索. 这个引擎的目的是服务, 在 MySQL 源代码中的一个例子, 它演示说明如何开始编写新存储引擎. 同样, 它的主要兴趣是对开发者.
NDB Cluster 是被 MySQL Cluster 用来实现分割到多台计算机上的表的存储引擎. 它在 MySQL-Max 5.1 二进制分发版里提供. 这个存储引擎当前只被 Linux, Solaris, 和 Mac OS X 支持. 在未来的 MySQL 分发版中, 我们想要添加其它平台对这个引擎的支持, 包括 Windows.
ARCHIVE 存储引擎被用来无索引地, 非常小地覆盖存储的大量数据.
CSV 存储引擎把数据以逗号分隔的格式存储在文本文件中.
BLACKHOLE 存储引擎接受但不存储数据, 并且检索总是返回一个空集.
FEDERATED 存储引擎把数据存在远程数据库中. 在 MySQL 5.1 中, 它只和 MySQL 一起工作, 使用 MySQL C Client API. 在未来的分发版中, 我们想要让它使用其它驱动器或客户端连接方法连接到另外的数据源.
如何选择最适合你的存储引擎呢?
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 引擎 (可为快速创建定制的插件式存储引擎提供帮助).
MySQL 存储引擎比较
MyISAM
MyISAM 是 MySQL 的默认存储引擎. MyISAM 不支持事务, 也不支持外键, 但其访问 (读) 速度快, 对事务完整性没有要求.
MyISAM 除了提供 ISAM 里所没有的索引和字段管理的大量功能, MyISAM 还使用一种表格锁定的机制, 来优化多个并发的读写操作, 其代价是你需要经常运行 OPTIMIZE TABLE 命令, 来恢复被更新机制所浪费的空间. MyISAM 还有一些有用的扩展, 例如用来修复数据库文件的 MyISAMCHK 工具和用来恢复浪费空间的 MyISAMPACK 工具. MYISAM 强调了快速读取操作, 这可能就是为什么 MySQL 受到了 Web 开发如此青睐的主要原因: 在 Web 开发中你所进行的大量数据操作都是读取操作. 所以, 大多数虚拟主机提供商和 INTERNET 平台提供商只允许使用 MYISAM 格式. MyISAM 格式的一个重要缺陷就是不能在表损坏后恢复数据.
InnoDB 存储引擎提供了具有提交, 回滚和崩溃恢复能力的事务安全. 但是比起 MyISAM 存储引擎, InnoDB 写的处理效率差一些并且会占用更多的磁盘空间以保留数据和索引.
MEMORY/HEAP
MEMORY(又叫 HEAP) 存储引擎使用存在内存中的内容来创建表. 每个 MEMORY 表只实际对应一个磁盘文件. MEMORY 类型的表访问非常得快, 因为它的数据是放在内存中的, 并且默认使用 HASH 索引. 但是一旦服务关闭, 表中的数据就会丢失掉. HEAP 允许只驻留在内存里的临时表格. 驻留在内存里让 HEAP 要比 ISAM 和 MYISAM 都快, 但是它所管理的数据是不稳定的, 而且如果在关机之前没有进行保存, 那么所有的数据都会丢失. 在数据行被删除的时候, HEAP 也不会浪费大量的空间. HEAP 表格在你需要使用 SELECT 表达式来选择和操控数据的时候非常有用.
MEMORY 主要用于那些内容变化不频繁的代码表, 或者作为统计操作的中间结果表, 便于高效地堆中间结果进行分析并得到最终的统计结果.
MERGE
MERGE 存储引擎是一组 MyISAM 表的组合, 这些 MyISAM 表必须结构完全相同. MERGE 表本身没有数据, 对 MERGE 类型的表进行查询, 更新, 删除的操作, 就是对内部的 MyISAM 表进行的. MERGE 用于将一系列等同的 MyISAM 表以逻辑方式组合在一起, 并作为一个对象引用它. MERGE 表的优点在于可以突破对单个 MyISAM 表大小的限制, 通过将不同的表分布在多个磁盘上, 可以有效的改善 MERGE 表的访问效率.
MyISAM 与 InnoDB 的区别
InnoDB 和 MyISAM 是许多人在使用 MySQL 时最常用的两个表类型, 这两个表类型各有优劣, 视具体应用而定. 基本的差别为: MyISAM 类型不支持事务处理等高级处理, 而 InnoDB 类型支持. MyISAM 类型的表强调的是性能, 其执行数度比 InnoDB 类型更快, 但是不提供事务支持, 而 InnoDB 提供事务支持已经外部键等高级数据库功能.
MyISAM 表还支持 3 中不同的存储格式: 静态表 , 动态表 , 压缩表
静态表是默认的存储格式, 静态表中的字段都是非变长的字段, 优点是: 存储非常迅速, 容易缓存, 出现故障容易恢复; 缺点是: 占用的空间通常比动态表多.(注意: 在存储时, 列的宽度不足时, 用空格补足, 当时在访问的时候并不会得到这些空格)
动态表的字段是变长的, 优点是: 占用的空间相对较少, 但是频繁地更新删除记录会产生碎片, 需要定期改善性能, 并且出现故障的时候恢复相对比较困难.
压缩表占用磁盘空间小, 每个记录是被单独压缩的, 所以只有非常小的访问开支.
InnoDB 存储方式为两种: 使用共享表空间存储 , 使用多表空间
来源: http://www.bubuko.com/infodetail-3394717.html