前言

MySQL 作为主流的数据库,是各大厂面试官百问不厌的知识点,但是需要了解到什么程度呢?仅仅停留在 建库、创表、增删查改等基本操作的水平可不够。在面试后端开发的时候,一连几个问题,简直会被问到一脸懵逼。

MySQL 语句怎么优化?分库,分表都适合哪些场景?讲讲 InnoDB 如何使用 B+ 树存储的?

一般来说,准备 MySQL 面试 ,无非要从这几块进行准备:查询、存储、事务、锁和性能调优。不少朋友苦于搜集资料耗时耗力,很难 cover 住面试官的考核角度。为了能让大家在准备面试时少走弯路,这里特别推荐一套大厂架构师MySQL学习笔记。


收获

花费了近三个月的时间,调研精选各大厂 MySQL 面试题的主流考点,经过多次迭代,最终形成了这套笔记来帮助正在求职的同学们。看下来,你可以:

  • 收获完整的 MySQL 学习路径
  • 针对实际场景分析数据库问题,进行性能调优
  • 吸收业界专家的经验分享,加速 MySQL 技能进阶
  • 加深 MySQL 底层和核心技术的理解
  • 轻松应对面试中 MySQL 问题

笔记具体内容:

结合多年从事推荐系统、搜索引擎、大数据开发等业务经验,从工作中的应用场景出发,引入相关概念和原理剖析,然后分析各种方案的利弊,最后总结和答疑。笔记主要分为十大部分:SQL编程、数据类型、查询处理、子查询、联接与集合操作、 聚合和旋转操作、游标、事务编程、 索引、 分区、具体有:
1、SQL编程

SQL是一种编程语言,用来解决关系数据库中的相关问题。SQL编程就是通过SQL语句来解决特定问题的一种编程方式。 本章将介绍MySQL数据库中与SQL编程相关的基础知识,帮助SQL用户更好地理解MySQL数据库、数据库应用类型,以及与SQL编程相关的特定问题。

  • 1.1 MySQL数据库
  • 1.2 SQL编程
  • 1.3数据库的应用类型
  • 1.4園形化的SQL查询分析器
  • 1.5小结

2、数据类型

数据类型在数据库中扮演着基础但又非常重要的角色。对数据类型的选择将影响与数据库交互的应用程序的性能。通常来说,如果-一个页内可以存放尽可能多的行,那么数据库的性能就越好,因此选择一个正确的数据类型至关重要。另一方面,如果在数据库中创建表时选择了错误的数据类型,那么后期的维护成本可能非常大,用户需要花大量时间来进行ALTER TABLE操作。对于一张大表,可能需要等待更长的时间。因此,对于选择数据类型的应用程序设计人员,或是实现数据类型的DBA,又或者是使用这些数据类型的程序员,花一些时间深入学习数据类型、理解它们的基本原理是非常必要的。在选择数据类型时要格外谨慎,因为在生产环境下更改数据类型可能是一种非常危险的操作。

  • 2.1类型属性
  • 2.2 SQL MODE设置
  • 2.3日期和时间类型
  • 2.4关于日期的经典SQL编程问题
  • 2.5数字类型
  • 2.6关于数字的经典SQL编程问题
  • 2.7字符类型
  • 2.8小结

3、查询处理

查询操作是关系数据库中使用最为频繁的操作,也是构成其他SQL语句(如 DELETE、UPDATE)的基础。当要删除或更新某些记录时,首先要查询出这些记录,然后再对其进行相应的SQL操作。因此基于SELECT的查询操作就显得非常重要。对于查询处理,可将其分为逻辑查询处理及物理查询处理。逻辑查询处理表示执行查询应该产生什么样的结果,而物理查询代表MySQL数据库是如何得到该结果的。两种查询的方法可能完全不同,但是得到的结果必定是相同的。

  • 3.1逻辑查询处理
  • 3.2物理查询处理
  • 3.3小结

4、子查询

MySQL数据库被诟病的一个地方就是子查询。很多开发人员和DBA认为MySQL数据库只是拥有该项功能,但性能很差,是一项很不实用的功能。在实际开发中开发人员很少使用子查询,因为在应用程序中使用子查询后,SQL语句的查询性能变得非常糟糕。本章介绍子查询的使用方法,同时介绍为什么有些子查询的效率令人难以接受,并对子查询的优化给出一些方法和建议。最后,介绍生产环境中子查询的一些应用,如分区、行号计算、缺失范围、连续范围等。

  • 4.1子查询概述
  • 4.2独立子查询
  • 4.3相关子查询
  • 4.4 EXISTS谓词
  • 4.5派生表
  • 4.6子查询可以解决的经典问题
  • 4.7 MariaDB对SEMI JOIN的优化
  • 4.8小结

5、联接与集合操作

本章介绍联接和集合操作。联接操作主要讲解MySQL数据库支持的三种联接方式,同时也给出了不同ANSI标准的语法。本章也对联接的内部实现算法进行了详细的介绍,这样能给用户更清晰的认识,使其选择正确的联接算法。最后对集合操作进行介绍,虽然MySQL数据库只支持UNION集合操作,但用户可以在UNION的基础之上实现EXCEPT和INTERSECT集合操作。

  • 5.1联接查询
  • 5.2其他联接分类
  • 5.3多表联接
  • 5.4滑动订单问题
  • 5.5联接算法
  • 5.6集合操作
  • 5.7小结

6、聚合和旋转操作

本章将介绍MySQL数据库中的聚合技术。首先介绍MySQL数据库的聚合算法,在此基础上介绍了一些通过聚合解决问题的方案,如附加属性聚合、连续聚合(累积、滑动、年初至今)等。最后通过上述聚合操作介绍旋转操作。本章在使用前面已经介绍过的技术的同时引入一些新的技术。

  • 6.1聚合
  • 6.2附加属性聚合
  • 6.3连续聚合
  • 6.4 Pivoting
  • 6.5 Unpivoting
  • 6.6 CUBE和ROLLUP
  • 6.7小结

7、游标

标(cursor)是一种面向过程的SQL编程方法,与前面章节讨论的通过面向集合的方法处理关系数据库问题全然不同。本章将介绍MySQL数据库中的游标,分析游标的开销,并介绍在一些问题中正确合理地使用游标会较之使用面向集合的SQL编程在效率方面带来的极大提升。同时告诉不管有多少年SQL编程经验的开发人员或DBA,游标并不是恶魔,关键在于如何正确分析问题和合理使用游标。

  • 7.1 面向集合与面向过程的开发
  • 7.2 游标的使用
  • 7.3游标的开销
  • 7.4使用游标解决问题
  • 7.5小结

8、 事务编程

  • 8.1事务概述
  • 8.2事务的分类
  • 8.3事务控制语句
  • 8.4隐式提交的SQL语句
  • 8.5事务的隔离级别
  • 8.6分布式事务编程
  • 8.7不好的事务编程习惯
  • 8.8长事务
  • 8.9小结

9、索引

事务(transaction) 是数据库区别于文件系统的重要特性之一。在文件系统中,如果用户正在写文件,但是操作系统突然崩溃了,这个文件就很有可能被破坏。当然, .有一些机制可以把文件恢复到某个时间点。不过,如果需要保证多个文件同步,这些文件系统可能就显得无能为力了。例如,当你更新两个文件时,更新完一个文件后,在更新完第二个文件之前系统重启了,你就会得到两个不同步的文件。

  • 9.1缓冲池、顺序读取与随机读取
  • 9.2数据结构与算法
  • 9.3 B+树
  • 9.4 B+树索引
  • 9.5 Cardinality
  • 9.6 B+树索引的使用
  • 9.7 Multi-Range Read
  • 9.8 Index Condition Pushdown
  • 9.9 T树索引
  • 9.10哈希索引
  • 9.11小结

10、分区

分区是一种表的设计模式。正确的分区可以极大地提升数据库的查询效率,完成更高质量的SQL编程。但是如果错误地使用分区,或者过于迷信分区,那么分区可能带来毁灭性的结果。本章介绍MySQL数据库中的分区功能,使用户了解何时使用分区及如何正确地使用分区功能。

  • 10.1分区概述
  • 10.2分区类型
  • 10.3子分区
  • 10.4分区中的NULL值
  • 10.5分区和性能
  • 10.6在表和分区间交换数据
  • 10.7小结

总结

由于篇幅限制,小编这里只将此笔记文档的所含内容全部展现出来了,需要获取完整文档用以学习的朋友们可以关注一下小编,点击此处 获取免费领取方式!

重要的事情说三遍,转发+转发+转发,一定要记得点赞转发哦!!!

希望能帮助到你在面试前的复习且找到一个好的工作,也节省大家在网上搜索资料的时间来学习。

最后整理了一张思维导图,获取方式一样,大家可以结合这个导图学习,更加快速哟。