【Mysql】慢SQL优化详解 Mysql案例

本文详细介绍了Mysql慢SQL的原因,包括查询性能的影响因素、慢SQL的危害,以及如何通过慢查询日志和执行计划进行排查定位。重点讲述了优化策略,如数据库和表优化、数据类型选择、索引优化、SQL优化等,旨在提高查询效率,减少资源消耗,提升用户体验。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

影响查询性能因素

–(定量为同一数据库 且并发 数据量一致)依次是:

  • 机器配置
  • 查询引擎
  • 表设计
  • 索引
  • SQL语句

什么是慢SQL

比通常执行慢、或者超过最大执行限定时间,通常是500ms

慢SQL危害

每个SQL执行都需要消耗一定I/O资源
SQL执行时间长,用户的体验较差

慢SQL排查定位方法

善用slow log

 -- Mysql为例开启slow log :
SET GLOBAL slow_query_log=1;
 -- 查看slowlog:
SHOW GLOBAL STATUS LIKE '%Slow_queries%';

善用执行计划

我们往往通过慢查询日志,可以找到慢查询的sql具体是怎么写的。我们往往可以通过表的索引,执行引擎等等去自己判断sql为什么执行缓慢的原因。但是这明显不是高效的。
我们的MySQL中为我们提供了EXPLAN关键字来协助我们分析SQL。

--查看执行计划
explain select * from order_exp;

通过使用 EXPLAIN 关键字可以模拟优化器执行 SQL 查询语句,从而知道 MySQL 是如何处理你的 SQL 语句的。分析查询语句或是表结构的性能瓶颈,总的来说通过 EXPLAIN 我们可以帮助我们分析:

  • 表的读取顺序
  • 数据读取操作的操作类型
  • 哪些索引可以使用limit
  • 哪些索引被实际使用
  • 表之间的引用
  • 每张表有多少行被优化器查询
    Mysql为例,我们根据select_type初步判断查询类型是否是复杂查询,type判断是否走索引,根据possible_keys、key查看具体走的索引,是否是最优索引,根据rows扫描行数是多少?等等我们可以进行直观的参考。
    具体说明如下:
字段信息 描述解释
id 查询的序号,包含一组数字,表示查询中执行select子句或操作表的顺序两种情况id相同,执行顺序从上往下id不同,id值越大,优先级越高,越先执行
select_type 查询类型,主要用于区别普通查询,联合查询,子查询等的复杂查询1、simple ——简单的select查询,查询中不包含子查询或者UNION 2、primary ——查询中若包含任何复杂的子部分,最外层查询被标记3、subquery——在select或where列表中包含了子查询4、derived——在from列表中包含的子查询被标记为derived(衍生),MySQL会递归执行这些子查询,把结果放到临时表中5、union——如果第二个select出现在UNION之后,则被标记为UNION,如果union包含在from子句的子查询中,外层select被标记为derived6、union result:UNION 的结果
type 显示联结类型,显示查询使用了何种类型,按照从最佳到最坏类型排序1、system:表中仅有一行(=系统表)这是const联结类型的一个特例。2、const:表示通过索引一次就找到࿰
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值