面试笔记——MySQL(优化篇:定位慢查询、SQL执行计划、索引、SQL优化)

定位慢查询

在MySQL应用中,慢查询 通常指的是执行时间超过一定阈值的查询语句。这个阈值通常由管理员或开发人员根据具体情况设置,一般是以毫秒为单位。慢查询可能会影响系统性能和用户体验,因此需要及时识别和优化。
表象: 页面加载过慢、接口压测响应时间过长(超过1s)
以下情景可能会导致慢查询:

  • 聚合查询
  • 多表查询
  • 表数据量过大查询
  • 深度分页查询
定位慢查询的方法

方案一:工具
调试工具:Arthas;
运维工具:Prometheus、Skywalking;
方案二:MySQL自带慢日志
慢查询日志记录了所有执行时间超过指定参数(long_query_time,单位:秒,默认10秒)的所有SQL语句的日志。如果要开启慢查询日志,需要在MySQL的配置文件(/etc/my.cnf)中配置如下信息:

# 开启MySQL慢日志查询开关,值为0表示不开启慢日志查询
slow_query_log=1
# 设置慢日志的时间为2秒,SQL语句执行时间超过2秒,就会视为慢查询,记录慢查询日志
long_query_time=2

配置完毕之后,通过以下指令重新启动MySQL服务器进行测试,查看慢日志文件中记录的信息 /var/lib/mysql/localhost-slow.log,如图:
在这里插入图片描述
注意:使用慢日志会损失一部分性能,因此一般是在调试阶段开启慢日志的功能,在生产环境下关闭。

SQL执行计划

可以采用EXPLAIN 或者 DESC命令获取 MySQL 如何执行 SELECT 语句的信息,语法:

# 直接在select语句前加上关键字explain/desc
EXPLAIN SELECT 字段列表 FROM 表名 WHERE 条件;

在这里插入图片描述

  • possible_keys 当前sql可能会使用到的索引
  • key 当前sql实际命中的索引
  • key_len 索引占用的大小(ps:可以通过key和key_len查看是否可能会命中索引。)
  • Extra 额外的优化建议,比如某个索引在使用的过程中是否使用了回表,下图中展示了两个参考信息:
    在这里插入图片描述
  • type 这条sql的连接的类型,性能由好到差为NULL、system、const、eq_ref、ref、range、 index、all
    • system:表示当前语句查询的表是MySQL系统中内置的表,(不常用);
    • const:根据主键查询,(使用频率高);
    • eq_ref:主键索引查询或唯一索引查询,只能返回一条数据;
    • ref:索引查询,查询结果可能是多条数据;
    • range:范围查询,(应用中的最低要求);
    • index:索引树扫描;
    • all:全盘扫描;
    • 若type的值是index或all,则说明此条S
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值