八股文之MySQL篇

本文介绍了MySQL中的DQL、DML和DDL执行顺序,讲解了SQL的执行流程,重点讨论了索引的原理、类型以及优化方法,包括B+树和回表查询。还涵盖了慢查询的定位和优化,事务的特性、隔离级别以及并发问题。最后提到了MySQL主从同步和分库分表策略。

前言

数据库中我们开发生产中是必需的,而MySQL是大多数公司的首选关系型数据库,这一篇开始介绍MySQL相关的面试题,并且给出相应的回答。

DQL(数据查询语言)的执行顺序

  1. FROM
  2. WHERE
  3. GROUP BY (无法用到SELECT中的别名)
  4. HAVING
  5. SELECT
  6. ORDER BY (可以用到SELECT中的别名)
  7. LIMIT

DML(数据修改语言)

  1. INSERT INTO
  2. UPDATE,SET
  3. DELETE FROM

DDL(数据定义语言)

  1. CREATE TABLE / INDEX / DATABASE
  2. DROP TABLE / INDEX / DATABASE
  3. ALERT TABLE
  4. RENAME TABLE / DATABASE

一条 SQL 是如何在 MySQL 中运行的 / 执行流程

  1. 语法解析
  2. 语义分析
  3. 查询优化,根据SQL的复杂性,表索引等因素来生成一个执行计划
  4. 生成执行计划
  5. 执行查询
  6. 返回结果

MySQL 中的函数

常见多行函数:

  1. IF:相当于Java中的 IF ELSE
  2. CASE:相当于Java中的 IF ELSE IF … ELSE
  3. IFNULL:不为 NULL 返回第一个值,为 NULL 返回第二个值
  4. CONCAT:字符串连接函数
  5. IN:值得注意的是,IN 函数的参数个数是有限制的,大概在一百万左右
  6. DATE_FORMAT:日期格式化函数,注意日期格式是: %Y年 %m月 %d日 %H时 %i分 %s秒
  7. SUBSTRING:截取字符串

单行 / 分组 / 聚集函数:

  1. MAX
  2. MIN
  3. COUNT
  4. SUM
  5. AVG

如何定位慢查询

  • 慢查询顾名思义,就是一条SQL执行的时间很长,所以它慢嘛,在面试中,我们应该结合相关的场景,讲出该场景中所涉及的接口,它在测试的时候响应的就很慢,后续我们排查到的原因就是慢查询
  • 还可以讲在系统中当时采用了运维工具(Skywalking),这个工具可以检测出是哪个接口,因为它呈现的方式非常直观,以图表的方式给出,一眼就可以看出哪些是耗时的接口,再去排查SQL的问题
  • 最后一个就是MySQL自带慢查询功能,MySQL在设计的时候就考虑到了这一点,非常的哇塞,我们开启这个功能也很简单,在配置文件my.ini(如果安装的时候不做特殊处理,配置文件的位置是固定的,直接在Linux中打开配置文件)中开启配置选项:slow-query-log=1long_query_time=2即可,前者是开启慢查询日志记录,后者是慢查询时间的阈值,超过这个时间的SQL,会被记录到慢查询日志文件中,后续进行排查即可,但一般在生产环境中不会开启该功能,因为会消耗一定的性能

如何优化或分析慢查询

采用MySQL自带的分析命令:explain 或 desc(两者功能相同)

  • 通过查看key和key_len字段检查是否命中了索引(索引本身存在是否有失效的情况)
  • 通过type字段查看sql是否有进一步的优化空间,是否存在全索引(索引树扫描) index 或全盘扫描 all
  • 通过extra建议判断,是否出现了回表的情况,如果出现了,可以尝试添加索引或修改返回字段来修复
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值