【Mysql】慢sql分析优化案例汇总

【Mysql】慢sql分析优化案例汇总

(一)案例一:阿里云慢sql挑战赛实战

190毫秒干到2毫秒

【1】表结构
在这里插入图片描述
【2】待优化sql
在这里插入图片描述
【3】第一次explain分析
在这里插入图片描述
【4】选取驱动表
优先选择数据量最小的表作为驱动表。a表和c表都是只有一条数据,但是a表的sql里有gmt_create进行排序,可以在这个字段上添加索引,从索引的利用率上来看,用a表作为驱动表是最合适的。
在这里插入图片描述
【5】开始创建索引
将关联字段和查询字段创建联合索引,有效减少回表数据量
在这里插入图片描述

【6】再次执行explain
c表上的user_id的索引生效了,其他两个表的索引没有生效
在这里插入图片描述

【7】执行explain extended
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
【8】修改表结构,选择合适的字段
在这里插入图片描述

【9】最后explain看优化结果
之前索引失效是因为字段类型不一致而隐式转型导致的
在这里插入图片描述

### 使用 MySQL 的 EXPLAIN 进行 SQL 查询优化实践 #### 分析 SQL 执行计划 为了理解 SQL 语句的执行过程并识别潜在瓶颈,`EXPLAIN` 是一个非常有用的工具。通过 `EXPLAIN` 可以查看查询是如何被执行的,包括访问路径、使用的索引以及涉及的数据量等信息。 ```sql EXPLAIN SELECT * FROM cm_settle_partner_day_data WHERE agent_id = '123' AND business_date >= '2023-01-01'; ``` 这条命令会返回有关上述查询的信息,帮助判断是否存在未充分利用的索引或其他低效操作[^1]。 #### 剔除非必要查询 在实际应用环境中,应当定期审查应用程序发出的所有 SQL 请求,移除那些不再需要或重复冗余的部分。这不仅减少了服务器负载,也提高了整体系统的响应速度和资源利用率。 #### 调整连接顺序提高效率 对于涉及到多个表之间的关联查询来说,合理的连接顺序能够显著改善性能表现。通常建议先处理记录数较少且具有较高选择性的表格,以此缩小后续阶段所需扫描的数据范围。如果默认生成的执行计划不够理想,则可通过显式指定的方式引导优化器做出更好的决策: ```sql SELECT /*+ ORDERED */ t1.*, t2.* FROM small_table AS t1, large_table AS t2 WHERE t1.id = t2.small_id; ``` 这里使用了 Oracle 风格的 hint 来指示数据库按书写顺序依次读取两个表的内容,并基于此构建最终的结果集[^3]。 #### 应用于具体场景下的优化策略 考虑到 `cm_settle_partner_day_data` 表主要用于前端展示每日汇总统计数据,在设计相应的检索逻辑时应充分考虑用户体验方面的要求——即快速反馈结果的同时保持足够的灵活性支持多样化的过滤条件设置。因此除了确保基础字段(如 `agent_id`, `business_date`)已建立适当类型的索引外,还应对可选参数做针对性优化措施,比如创建组合索引来覆盖常见的查询模式,或是采用分区技术加速特定日期区间内的数据获取进程[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值