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博客

相关推荐
桦说编程3 小时前
滑动窗口限流器的演进之路:从调度器实现到 Packed CAS
java·后端·性能优化
luoluoal3 小时前
基于python大数据的电影市场预测分析(源码+文档)
python·mysql·django·毕业设计·源码
conca3 小时前
Java+MySQL时区难题-Date自动转换String差8小时
数据库·mysql
壹米饭3 小时前
MYSQL进阶:删除视图时视图被lock解决方案
后端·mysql
oMcLin4 小时前
如何在Ubuntu 22.04 LTS上配置并优化MySQL 8.0分区表,提高大规模数据集查询的效率与性能?
android·mysql·ubuntu
一路向北⁢5 小时前
MySQL 5.7 表分区使用说明(视频系统实战)
mysql·分区·分表·表分区
齐鲁大虾6 小时前
SQL Server 和 MySQL的区别
数据库·mysql
东方巴黎~Sunsiny7 小时前
mysql大表空间整理注意点
数据库·mysql
lifejump7 小时前
Pikachu | SQL-inject
数据库·sql
AllData公司负责人8 小时前
AllData数据中台-数据同步平台集成开源项目Seatunnel-Web,完成Mysql到Doris同步流程
数据库·mysql·开源