暂无图片
MYSQL 多表连接优化
我来答
分享
hzdba
2021-01-06
MYSQL 多表连接优化
暂无图片 10M

有一个sql如下,看结构是别名为RES的表跟别名为I,RES3,f的三个表进行jion和left jion,请教大神们这个sql可以怎么去优化吗,执行计划我放在后面
SELECT
RES.ID_,
RES.CREATETIME_,
RES.T_F_KEY_,
RES.P_F_ID_,
RES.P_I_ID_,
RES.ASSIGNEE_,
RES.NAME_,
RES.E_ID_,
RES3.TEXT_,
f.aTitle,
f.extString,
f.uId,
f.aId
FROM
A_U_K RES
LEFT JOIN (
SELECT DISTINCT
*
FROM
(
SELECT
T_ID_,
U_ID_ AS USER_ID
FROM
A_RU_IK I,
A_U_K T
WHERE
I.T_ID_ = T.ID_
AND TYPE_ = ‘candidate’
AND T.ASSIGNEE_ IS NULL
AND U_ID_ IS NOT NULL
AND TID_ IS NOT NULL
UNION
SELECT
T_ID_,
G_ID_ AS USER_ID
FROM
A_RU_IK I,
A_U_K T
WHERE
I.T_ID_ = T.ID_
AND TYPE_ = ‘candidate’
AND I.G_ID_ IS NOT NULL
AND I.T_ID_ IS NOT NULL
AND T.ASSEE_ IS NULL
) U
) I ON RES.ID_ = I.T_ID_
JOIN A_RU_VALE RES3 ON RES3.P_T_ID_ = RES.P_T_ID_
LEFT JOIN f_tance f ON f.processId = RES.P_T_ID_
AND f.STATUS = 1
WHERE
( RES.ASSEE_ LIKE ‘%ADMIN%’ OR I.U_ID LIKE ‘%ADMIN%’ )
AND RES3.NAME_ = ‘moduleId’
AND RES3.TEXT_ != ‘internal-list’
AND f.id is not null
ORDER BY
RES.CREATETIME_ DESC;

我来答
添加附件
收藏
分享
问题补充
2条回答
默认
最新
hzdba
2021-01-06

执行计划如下:
图片.png
我现在弄不懂,这个sql怎么去改或者优化,因为RES表是分别跟另外三个表进行关联的,想要消除执行计划的Using temporary; Using filesort

暂无图片 评论
暂无图片 有用 0
打赏 0
Cui Hulong
2021-01-13

从语句里看一下3个点可以先优化一下:
1.UNION 去掉 用or 语句匹配
2.LEFT JOIN 能否使用 inner join
3.LIKE 前面 %能不能去掉,看看能不能用上一些组合索引
4.那个表数据少 就用驱动表

这个要具体语句,一个一个匹配调试才可以

暂无图片 评论
暂无图片 有用 0
打赏 0
回答交流
Markdown


请输入正文
提交
相关推荐
sql优化与配置问题
回答 1
具体什么优化和配置问题?
alter table DBA_test partition by range(to_days(create_time)) 在线修改普通表成为分区表。它在COPY TOTM TABLE 如何让它行为变成ONLINE DDL 呢?
回答 1
已采纳
对于onlineddlparitionby操作ALGORITHMCOPY方式。可以使用第三方工具ghosc或ptosc工具进行ddl变更。
mysql canal kafka es这样的组合为什么不能跳过kafka?
回答 1
一般中间需要类似jstorm或flink计算
MySQL
回答 3
MYSQLSSL配置https://mp.weixin.qq.com/s/CSD77K35C1yBvquEDkBb5Q
THREAD_OS_ID 怎么在系统层面找不到对应?
回答 1
mysql是单进程多线程模式,所以看到的是线程号(所以你猜猜thread是啥意思?).使用ps的话,得加个T(Showthreads,possiblywithSPIDcolumn)才行,也就是psef
MySQL定时备份后脚本大小为0 是怎么回事?
回答 3
把备份命令拿出来执行下试试,应该是脚本失败了
mysql8怎么查看优化后的sql?
回答 1
举一个例先执行explainselectisdelete,isvipfromuserwhereisdeleteisvipandisdelete0;然后再执行showwarnings;就可以看到优化后的
mysql5.7 升级到mysql8,直接拷贝data目录的文件,跨版本还能用吗?
回答 1
已采纳
不能。
MySQL Innodb存储引擎存储引擎状态报告中spin为什么会持续占用cpu?
回答 1
MySQL使用了自旋锁(spinlock),它本质上是一个非阻塞锁,也就是说,如果某线程需要获取锁,但该锁已经被其他线程占用时,该线程不会被挂起,而是在不断的消耗CPU的时间,不停的试图获取锁。频繁的
mysql中如何实现按概率抽取
回答 1
已采纳
可以先把这40个权重字段的值先设置成40个吗?如果设置成了40个不一样的。你随便取值都是不一样的,只要不取取过的。