本篇主要讲 MySQL 存储引擎 InnoDB 与 Myisam 的区别。
MySQL 有多种存储引擎,每种存储引擎有各自的优缺点,以下是几种类型可以择优选择使用:
MyISAM、InnoDB、MERGE、MEMORY(HEAP)、BDB(BerkeleyDB)、EXAMPLE、FEDERATED、ARCHIVE、CSV、BLACKHOLE。
这几种数据库存储引擎的作用
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 和 InnoBD。
MyISAM 和 InnoBD 的区别
1.[事务]MyISAM 是非事务安全型的,而 InnoDB 是事务安全型的,默认开启自动提交,宜合并事务,一同提交,减小数据库多次提交导致的开销,大大提高性能。
2.[锁]MyISAM 锁的粒度是表级,而 InnoDB 支持行级锁定。
3.[全文索引]MyISAM 支持全文类型索引,而 InnoDB 不支持全文索引。
4.[查询效率]MyISAM 相对简单,所以在效率上要优于 InnoDB,小型应用可以考虑使用 MyISAM。
5.[外健]MyISAM 不支持外健,InnoDB 支持。
6.[count]MyISAM 保有表的总行数,InnoDB 只能遍历。
6. MyISAM 表是保存成文件的形式,在跨平台的数据转移中使用 MyISAM 存储会省去不少的麻烦。
7. InnoDB 表比 MyISAM 表更安全,可以在保证数据不会丢失的情况下,切换非事务表到事务表(alter table tablename type=innodb.。
8. MyIsam 索引和数据分离,InnoDB 在一起,MyIsam 天生非聚簇索引,最多有一个 unique 的性质,InnoDB 的数据文件本身就是主键索引文件,这样的索引被称为“聚簇索引”
9. InnoDB 提供多版本数据支持,MyIsam 不支持
10. 两者都仅支持 B+树索引,不支持 hash 索引
应用场景:
1.MyISAM 管理非事务表。它提供高速存储和检索,以及全文搜索能力。如果应用中需要执行大量的 SELECT 查询,那么 MyISAM 是更好的选择。
2.InnoDB 用于事务处理应用程序,具有众多特性,包括 ACID 事务支持。如果应用中需要执行大量的 INSERT 或 UPDATE 操作,则应该使用 InnoDB,这样可以提高多用户并发操作的性能。
如何选择:
1. 是否要支持事务,如果要请选择 InnoDB,如果不需要可以考虑 MyISAM。
2. 如果表中绝大多数都只是读查询,可以考虑 MyISAM,如果既有读写也挺频繁,请使用 InnoDB。
3. 系统奔溃后,MyISAM 恢复起来更困难,能否接受,不能接受就选 InnoDB;
4. MySQL5.5 版本开始 Innodb 已经成为 Mysql 的默认引擎 (之前是 MyISAM),说明其优势是有目共睹的。如果你不知道用什么存储引擎,那就用 InnoDB,至少不会差。
