qq_36058359 2021-08-10 00:48 采纳率: 0%
浏览 535

mysql用left join速度很慢,求指导还能怎么优化。

数据库为mysql
原SQL如下

SELECT DISTINCT
 d.ID,f.USERID
FROM
 ORGUSER f
JOIN DM_QX_SWRYSF a ON f.USERID = a.SWRY_DM
JOIN QX_JGGW_SWRYSF b ON b.SWRYSF_DM = a.SWRYSF_DM
JOIN QX_SWJG_GW c ON b.GWXH = c.GWXH
JOIN ORGROLE d ON c.GW_DM = d.ROLENO
left JOIN ORGUSERMAP e ON e.ROLEID = d.ID and e.userid=f.userid
WHERE d.ID IS NOT NULL AND e.ID IS NULL

最后一步关联ORGUSERMAP 前,查询速度约在3-4秒,数据量为13万,ORGUSERMAP数据量也在13W左右
我要比对前面的结果集和后面的ORGUSERMAP表,找到ORGUSERMAP中不存在的数据。
目前查询时间超过20分钟,另外我也试过把最后的关联ORGUSERMAP改成not exist,执行时间也超过20分钟。
关联查询用到的字段我已经都添加了索引。
我数据库玩的少,是在不知道怎么优化了,求指导。

  • 写回答

1条回答 默认 最新

  • CSDN专家-微编程 2021-08-10 06:17
    关注

    首先检查表的主键和外键是不是都是int类型,防止你某个外键写成了varchar类型,总之表联立的两个字段类型必须保持一致,此外可能你的这个表ORGUSERMAP字符集与其他表字符集不一样才导致查询慢,你可以先检查一下是否都走索引了,比如sql前面加上 explain,如果有的没有走就说明某些表字段字符集不一样建议都在重新规定一下字符集,如果你还没有解决那么
    你可以参考一下这篇文章 https://www.cnblogs.com/benbenhan/articles/13519648.html https://www.cnblogs.com/benbenhan/articles/13519648.html

    评论

报告相同问题?

问题事件

  • 创建了问题 8月10日

悬赏问题

  • ¥20 蓝牙耳机怎么查看日志
  • ¥15 Fluent齿轮搅油
  • ¥15 八爪鱼爬数据为什么自己停了
  • ¥15 交替优化波束形成和ris反射角使保密速率最大化
  • ¥15 树莓派与pix飞控通信
  • ¥15 自动转发微信群信息到另外一个微信群
  • ¥15 outlook无法配置成功
  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏