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

相关推荐
Seraphina3633 分钟前
SQLI-labs(一)黑盒全流程
sql·安全·web安全
java1234_小锋1 小时前
【技术专题】Mysql8 数据库 - Mysql8 数据类型简介
数据库·mysql
无名猿1 小时前
unique_ptr 完全指南:独占所有权与零开销
c++·性能优化·内存管理·标准库·现代c++
JosieBook2 小时前
【数据库】MySQL 实战精通系列 · 第10篇:分库分表与分布式事务实战
数据库·分布式·mysql
做运维的阿瑞6 小时前
多表查询基础:INNER JOIN、LEFT JOIN、RIGHT JOIN
数据库·sql·mysql·算法
Seraphina366 小时前
DVWA(SQL注入-low,medium,XSS反射-low)
前端·数据库·笔记·sql·网络安全·web·xss
夜雪一千7 小时前
MySQL 中什么是条件注释
数据库·mysql
暖核8 小时前
MySQL 高级运维核心:备份恢复、主从复制与 MHA 高可用复习总结
运维·数据库·mysql
Helix2509 小时前
Chrome 性能优化实战:内存节省、硬件加速与 Flags 设置,让浏览器更流畅
chrome·google·性能优化·内存占用·硬件加速·设置技巧·浏览器优化
晚风叙码9 小时前
MySQL 表的操作:从建表到删表,一篇讲清楚
android·mysql·oracle