相关文章:
在 MySQL5.5 版本之前,MyISAM 是 MySQL 的默认存储引擎;从 MySQL5.5 版本开始,InnoDB 是 MySQL 的默认存储引擎
一、MyISAM 存储引擎特性
-
如上所示,共有以下特性
-
支持 B 树索引
-
支持备份或时间点恢复
- 需要在服务器中实现,而不是在存储引擎中实现
-
不支持集群数据库
-
不支持聚集索引
-
支持压缩数据
-
仅当使用压缩行格式时才支持 MyISAM 压缩数据
-
同时使用压缩行格式与 MyISAM 存储引擎的表是只读的
-
-
不支持数据缓存
-
支持数据加密
- 需要在服务器中,通过加密功能来实现
-
不支持外键
-
支持全文索引 (FULLTEXT)
-
支持地理空间数据类型
-
支持地理空间索引
-
不支持哈希索引
-
支持索引缓存
-
锁粒度:表,即表级锁
-
不支持 MVCC
-
支持复制
- 需要在服务器中实现,而不是在存储引擎中实现
-
存储限制
- 256 TB
-
不支持 T 树索引
-
不支持事务
-
支持更新数据字典中的统计信息
-
二、InnoDB 存储引擎特点
-
如上所示,共有以下特性
-
支持 B 树索引
-
支持备份或时间点恢复
- 需要在服务器中实现,而不是在存储引擎中实现
-
不支持集群数据库
-
支持聚集索引
-
支持压缩数据
-
支持数据缓存
-
支持数据加密
-
需要在服务器中,通过加密功能来实现
-
在 MySQL5.7 以及更高的版本中,支持静态数据表空间加密
-
-
支持外键
-
支持全文索引 (FULLTEXT)
- MySQL5.6 版本开始支持
-
支持地理空间数据类型
-
支持地理空间索引
- MySQL5.7 版本开始支持
-
不支持哈希索引
-
InnoDB 在内部将哈希索引用于其自适应哈希索引 (adaptive hash index) 功能
-
InnoDB 支持的哈希索引是自适应的,当 InnoDB 注意到某些索引值被使用的非常频繁时,它会在内存中基于 B-Tree 索引之上再创建一个哈希索引,这样就让 B-Tree 索引也具有了哈希索引的一些优点,比如:快速的 Hash 查找,这是一个完全自动的、内部的行为,不能人为干预是否在一张表中生成哈希索引
-
-
支持索引缓存
-
锁粒度:行,即行级锁
-
支持 MVCC
-
支持复制
- 需要在服务器中实现,而不是在存储引擎中实现
-
存储限制
- 64 TB
-
不支持 T 树索引
-
支持事务
-
支持更新数据字典中的统计信息
-
三、归纳总结
-
MyISAM 和 InnoDB 的区别
-
MyISAM 不支持聚集索引;InnoDB 支持聚集索引
-
MyISAM 不支持数据缓存;InnoDB 支持数据缓存 (两者都支持索引缓存)
-
MyISAM 不支持外键;InnoDB 支持外键
-
MyISAM 支持全文索引;InnoDB 从 MySQL 5.6 版本开始支持全文索引
-
MyISAM 不支持哈希索引;InnoDB 也不支持哈希索引,但其内部支持自适应哈希索引
-
MyISAM 默认使用表级锁,不支持行级锁;InnoDB 默认使用行级锁,同时也支持表级锁
-
MyISAM 不支持事务;InnoDB 支持事务
-