怎么学习Mysql?你应该掌握的知识点和学习顺序

149 阅读3分钟

提要

本文不讲课,只说我个人的mysql学习路线。

一直以来都抓不住学习mysql的重点!如何有条理的学习mysql!来来回回去搜sql优化解决方案。还是只能面试的时候背一背,面试一深就不知所云。心病已久,故此我根据自己的学习经验,分享下应该怎么去系统的学习mysql。了解底层的逻辑后,优化和其他问题就迎刃而解。

1.数据结构

  • 为什么用B+树,而不是B树和红黑树? 我个人认为这是学好mysql后续知识点的基石,在了解了mysql数据结构B+树之后,后面的索引优化的底层逻辑就一目了然了,就是为了保证数据的有序性。

2.存储引擎与索引

  • innodb和myisam的区别?
  • 常用的索引类型有哪些?项目中的组合索引如何设置?
  • 聚簇索引、非聚簇索引、索引下推、回表、覆盖索引是什么? 上述问题,了解后。就会更加深入的了解为什么我们的数据库表选择innodb的部分原因(innodb在减少回表操作的优化采用覆盖索引)

了解上述的三个问题后,能够很好的指导我们在代码中sql的书写。至少保证了在sql层面不能太拉胯,表设计拉胯与我无瓜。

3.执行计划

到此我们已经能够很小心的去书写sql了。但是我们作为程序员一定要用数据说话,怎么证明自己的sql木的问题?这时候我们就要借助explain工具来帮助我们分析自己的sql。这里我列举一些比较重要的列

  • id:sql的执行顺序
  • type:ALL, index, range, ref, eq_ref, const, system, NULL(从左到右,性能从差到好。实际开发中要达到range级别的!)
  • Extra :Using where、Using filesort explain解析直通车:https://juejin.cn/post/7093440773290459166#heading-6

4.索引的最佳实践

  • 索引失效的场景?
  • 如何合理的设置业务中的索引? 在熟悉前面三个知识点的时候,这两个问题的底层应该是说游刃有余了。我只需要去记住一些特定的手段和优化手段就可以了。面试官细问的时候,也能从更加底层的角度回答问题。至少可以秒掉一批竞争者。

索引最佳实践直通车:https://juejin.cn/post/7093451182391164959

5.事务、锁、mvcc

  • 事务的四大特性是什么?隔离级别有哪些?分别解决了什么?
  • mysql通过什么方式来保证事务的四大特性?
  • mvcc是什么?通过什么实现的并发隔离? 事务的特性是innodb独有的,事务的四大特性的底层就是依赖 锁和mvcc机制。所以要知其然知其所以然。

6.undo、redo、binlog

  • undo日志是负责什么的?在介绍下mvcc吧结合着undo与readView?
  • redo日志的作用是什么?
  • binlong日志作用是什么? 了解上述三个日志文件后,就能很好理解事务回滚机制、数据持久化流程、数据恢复等一些列问题。

再了解了上述的问题后,其实整个的mysql就算是学有小成就了,后面我就需要去了解mysql高可用的一些方案了。推荐一个我已经刷完的一个白嫖课程。

7.mysql 高可用方案--主从配置、分库分表

黑马白嫖党(#^.^#)

www.bilibili.com/video/BV1jJ…