秒杀面试官的MySQL学习路线
Level 1:基本语法
-
数据库的熟练使用,熟练使用CRUD SQL语句,包括一些相对复杂的多表关联查询、子查询等。
-
会添加索引,了解数据库索引的基本概念,知道如果字段加索引了,查询效率会比较快。
-
会进行常见系统的表设计,需要了解数据库的范式、ACID特性等作为知识辅助。
基本排除:存储过程、视图、触发器之类的知识没必须要学,基本上很少有公司会用了。
Level 2:弄懂原理(重点)
-
弄明白MySQL的锁机制,并知道其解决哪种场景的问题。如:乐观锁、悲观锁、共享锁、独占锁、记录锁、间隙锁、Next-Key锁、意向锁、插入意向锁、行锁、表锁、页锁、自增锁、死锁等。
-
弄明白MySQL的索引机制,如:B+树索引、哈希索引、聚簇索引、非聚簇索引、前缀索引、覆盖索引、组合索引、最左前缀等等。
-
弄明白MySQL的事务和日志,如:事务隔离级别、事务实现原理、MVCC、Redo Log、Undo Log、Bin Log、mini-transaction、脏读、幻读、不可重复度。
-
弄明白MySQL的存储,如:存储原理(页、区、段、表空间)、Buffer Pool等。
-
其他重要知识,如:执行计划、表连接算法、ICP、BKA、MRR、Master Thread调度、Partial Write、Change Buffer等。
Level 3:深入优化(ssp必备)
-
根据当前的系统特性和业务场景,做出合理的表结构设计。如:知道什么地方需要加表冗余字段,什么地方需要根据数据的冷热程度进行垂直拆分,如何设计才能最大限度规避锁征用,多对多情况下的表结构设计,父子情况下的表结构设计等。
-
给你一条复杂的慢查SQL,分析其执行计划后,无论是通过添加联合索引,通过force index,通过straight join,通过优化表结构,通过重写SQL等方式,将该SQL的性能优化到合理值。
-
生产环境数据库Dead Lock了,你能够通过日志定位,并快速解决问题。
-
生成环境数据库宕机了,能够通过DBA提供的信息,迅速排查出性能瓶颈并解决。
-
大中型系统,在高并发,数据量大的场景下,给出你的表设计方案,分库分表方案,该方案能够满足系统未来五年的增量。
-
进阶模式,结合于Redis、ES、Kafka,或是Doris、ClickHouse,给出基于系统存储的整体解决方案。该解决方案不但能让各个存储发挥其所长,要尽量规避多存储源导致的一致性问题。
推荐资源
推荐我认为最好的学习资源:黑马程序员 MySQL数据库入门到精通(直通车)基本覆盖了面试会问的所有知识点,看完后,就能对MySQL有一个很清楚的认知了。之后再针对不太懂的进行深入学习即可。
#晒一晒我的offer#