mysql 多表关联查询性能优化-同一sql不同的执行计划

一、问题背景

相同的sql,不同的日期,执行的时间差异很大,执行计划不一样。执行快时,30ms左右。执行慢时,15s左右。

二、分析结论

1、经过分析,发现不同日期下,sql的执行计划不同,驱动表不同。sop作为驱动表时,执行速度快,sot作为驱动表时,执行速速慢。

2、驱动表确认原则,即小表原则。

3、如何确认大小表

以sop和sot两个表的关联为例。在现有查询条件不表的情况下

a、仅针对sop表进行查询,保留关联查询中所有有关sop表的查询条件,分析单查sop表的执行计划,查看对应的rows值。4.11日的扫描数据是11768,5.11日的扫描数据是15056。

b、仅针对sot表进行查询,保留关联查询中所有有关sot表的查询条件,分析单查sot表的执行计划,查看对应的rows值。扫描的数据是固定的,都是13952。

所以,4.11日关联查询,驱动表是sop。5.11日的关联查询,驱动表是sot。

三、解决方案

a、关联查询时,使用force index语法,强制指定索引

参考mysql多表查询,强制使用特定索引-CSDN博客

b、关联查询时,使用STRAIGHT_JOIN语法,强制指定驱动表

参考【性能提升神器】STRAIGHT_JOIN,指定驱动表-CSDN博客

相关推荐
小江的记录本16 小时前
【分布式】分布式核心组件——分布式ID生成:雪花算法、号段模式、美团Leaf、百度UidGenerator、时钟回拨解决方案
分布式·后端·算法·缓存·性能优化·架构·系统架构
数据库小组1 天前
MySQL 删库后怎么恢复?binlog2sql 之外,NineData 还能做什么
数据库·sql·mysql·安全·数据·ninedata·删库
competes1 天前
慈善基金投资底层逻辑应用 顶层代码低代码配置平台开发结构方式数据存储模块
java·开发语言·数据库·windows·sql
0xDevNull1 天前
MySQL 别名(Alias)指南:从入门到避坑
java·数据库·sql
weixin199701080161 天前
当当商品详情页前端性能优化实战
性能优化
kyriewen1 天前
你的首屏慢得像蜗牛?这6招让页面“秒开”
前端·面试·性能优化
空中海1 天前
第十一章:iOS性能优化、测试与发布
ios·性能优化
九皇叔叔1 天前
MySQL 8.0 测试库安装
数据库·mysql
码界筑梦坊1 天前
356-基于Python的网易新闻数据分析系统
python·mysql·信息可视化·数据分析·django·vue·毕业设计
一只大袋鼠1 天前
MyBatis 从入门到实战(二):代理 Dao 开发与多表关联查询
java·开发语言·数据库·mysql·mybatis