数据库为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分钟。
关联查询用到的字段我已经都添加了索引。
我数据库玩的少,是在不知道怎么优化了,求指导。
首先检查表的主键和外键是不是都是int类型,防止你某个外键写成了varchar类型,总之表联立的两个字段类型必须保持一致,此外可能你的这个表ORGUSERMAP字符集与其他表字符集不一样才导致查询慢,你可以先检查一下是否都走索引了,比如sql前面加上 explain,如果有的没有走就说明某些表字段字符集不一样建议都在重新规定一下字符集,如果你还没有解决那么
你可以参考一下这篇文章 https://www.cnblogs.com/benbenhan/articles/13519648.html https://www.cnblogs.com/benbenhan/articles/13519648.html