一、存储引擎
1.MySQL中执行一条SQL语句的过程是怎样的?
- 连接器
- 查询缓存(那缓存什么时候失效呢?)
- 解析SQL
- 执行SQL
语法树

1.1 MySQL的存储引擎有哪些?
-
InnoDB
- 5.5之后,MySQL默认的存储引擎,支持事务和行级锁,具有回滚和崩溃恢复功能。(为什么InnoDB替代了MyIsam?)
-
MyIsam
- 不支持事务和行级锁,无法做到崩溃恢复。
- 数据文件结构有.frm .myd .myi
-
Memory
- 将数据存储到内存中,可以快速访问数据,并且这些数据不会被修改,重启之后丢失也没问题。
1.2 MyIsam和InnoDB有什么区别?
- 数据存储方式
- InnoDB采用索引组织表,索引即数据,数据即索引。
- MyIsam采用堆表,索引和数据完全分开。
- 锁
- MyIsam仅支持表锁,InnoDB支持表锁和行锁。
- 事务
- MyIsam不支持事务。
堆表
- 堆表中的索引都是非聚簇索引,没有聚簇索引这一说。
- 由于索引的叶子节点存放的是堆表的物理地址,如果堆表的数据发生变动,那么索引将全部被动更新,这是非常影响性能的。
索引组织表
- 索引组织表中是有聚簇索引和非聚簇索引的。
- 非聚簇索引的变动不影响聚簇索引。
2.MySQL表的结构是什么?
MySQL默认的是InnoDB存储引擎,所以相关内容主要以InnoDB为主。
- 段:用于存储具体对象,比如数据段、索引段、Undo段,新增数据时,会分配新的区。
- 区:每个区是1mb,包含64页。
- 页:是数据存储的基本单位,每页16kb,又根据不同的数据类型分为不同类型的页,比如数据页、索引页、undo页、系统页、事务页。
- 行:行数据。