主题
《面渣逆袭》MySQL 篇 · 第 3/10 章。原版 PDF(下载 / 打印)
16.MySQL 有哪些常见存储引擎?

主要存储引擎以及功能如下:
| 功能 | MylSAM | MEMORY | InnoDB |
|---|---|---|---|
| 存储限制 | 256TB | RAM | 64TB |
| 支持事务 | No | No | Yes |
| 支持全文索引 | Yes | No | Yes |
| 支持树索引 | Yes | Yes | Yes |
| 支持哈希索引 | No | Yes | Yes |
| 支持数据缓存 | No | N/A | Yes |
| 支持外键 | No | No | Yes |
MySQL5.5 之前,默认存储引擎是 MylSAM ,5 .5 之后变成了 InnoDB 。
InnoDB 支持的哈希索引是自适应的,InnoDB 会根据表的使用情况自动为表生成哈希索引,不能人为干预是否在一张表中生成哈希索引。
MySQL5.6 开始 InnoDB 支持全文索引。
17.那存储引擎应该怎么选择?
大致上可以这么选择:
大多数情况下,使用默认的 InnoDB 就够了。如果要提供提交、回滚和恢复的事务安全(ACID兼容)能力,并要求实现并发控制,InnoDB 就是比较靠前的选择了。
如果数据表主要用来插入和查询记录,则 MyISAM 引擎提供较高的处理效率。
如果只是临时存放数据,数据量不大,并且不需要较高的数据安全性,可以选择将数据保存在内存的 MEMORY 引擎中,MySQL 中使用该引擎作为临时表,存放查询的中间结果。
使用哪一种引擎可以根据需要灵活选择,因为存储引擎是基于表的,所以一个数据库中多个表可以使用不同的引擎以满足各种性能和实际需求。使用合适的存储引擎将会提高整个数据库的性能。
18.InnoDB 和 MylSAM 主要有什么区别?
PS:MySQL8.0 都开始慢慢流行了,如果不是面试,MylSAM 其实可以不用怎么了解。

1. 存储结构:每个 MyISAM 在磁盘上存储成三个文件;InnoDB 所有的表都保存在同一个数据文件中(也可能是多个文件,或者是独立的表空间文件),InnoDB 表的大小只受限于操作系统文件的大小,一般为 2GB 。
2. 事务支持:MyISAM 不提供事务支持;InnoDB 提供事务支持事务,具有事务(commit)、回滚
(rollback)和崩溃修复能力(crash recovery capabilities)的事务安全特性。3 最小锁粒度:MyISAM 只支持表级锁,更新时会锁住整张表,导致其它查询和更新都会被阻塞
InnoDB 支持行级锁。
4. 索引类型:MyISAM 的索引为聚簇索引,数据结构是 B 树;InnoDB 的索引是非聚簇索引,数据结构是 B+ 树。
- 主键必需:MyISAM 允许没有任何索引和主键的表存在;InnoDB 如果没有设定主键或者非空唯一索引,* * 就会自动生成一个 6 字节的主键( 用户不可见) ,数据是主索引的一部分,附加索引保存的是主索引的值。
sql
6. 表的具体行数:MyISAM 保存了表的总行数,如果 select count(*) from table;会直接取出出该
值; InnoDB 没有保存表的总行数,如果使用 select count(*) from table;就会遍历整个表;但是在加了 wehre 条件后,MyISAM 和 InnoDB 处理的方式都一样。
7. 外键支持:MyISAM 不支持外键;InnoDB 支持外键。