前一阵系统的学习了一下MySQL,也有一些实际操作经验,偶然看到一篇和MySQL相关的面试文章,发现其中的一些问题自己也回答不好,虽然知识点大部分都知道,但是无法将知识串联起来
因此决定搞一个MySQL灵魂100问,试着用回答问题的方式,让自己对知识点的理解更加深入一点
主要针对的是开发人员需要知道的一些MySQL的知识点,主要包括索引,事务,优化等方面,以在面试中高频的问句形式给出答案
索引相关
- 什么是索引?
- 索引是个什么样的数据结构呢?
- Hash索引和B+树所有有什么区别或者说优劣呢?
- 上面提到了B+树在满足聚簇索引和覆盖索引的时候不需要回表查询数据,什么是聚簇索引?
- 非聚簇索引一定会回表查询吗?
- 在建立索引的时候,都有哪些需要考虑的因素呢?
- 联合索引是什么?为什么需要注意联合索引中的顺序?
- 创建的索引有没有被使用到?或者说怎么才可以知道这条语句运行很慢的原因?
- 那么在哪些情况下会发生针对该列创建了索引但是在查询的时候并没有使用呢?
事务相关
- 什么是事务?
- ACID是什么?可以详细说一下吗?
- 同时有多个事务在进行会怎么样呢?
- 怎么解决这些问题呢?MySQL的事务隔离级别了解吗?
- Innodb使用的是哪种隔离级别呢?
- 对MySQL的锁了解吗?
- MySQL都有哪些锁呢?像上面那样子进行锁定岂不是有点阻碍并发效率了?
表结构设计
- 为什么要尽量设