您的位置:首页 > 数据库

关于SQL左连接效率问题

2016-10-17 00:00 447 查看
项目在开发新功能,涉及到一张表,里面数据有一百多W的条,表字段竟然有一百多个。。实在是没法再往下新增加字段了,于是就新增了一张表,用做扩展吧,通过表key来关联。后来涉及到以扩展表中某个字段作为查询条件进行检索,于是很自然就会想到通过left join新建个视图,然后进行检索这个视图。可是很不幸...慢的要死,查一下要三十几秒...

SELECT *
FROM LANDREG.TDDJ_TDDJDA T
LEFT JOIN LANDREG.TDDJ_TDDJDA_EXT E
ON T.TDDJID = E.TDDJID

然后 explain plan一下语句,看到对两个表都进行了全表扫描。


解释一下left join大概意思: 首先取出左边表中所有数据,然后再加上与左右两个表匹配的的数据。 这样一来速度自然就慢了

于是只能抛弃这种方法。

优化视图

先找出主表中扩展表没有的数据,然后再关联主表与扩展表,最后通过union all将两个查询结果联合起来形成一个视图。

SELECT T.TDDJID, '' AS FILEBARCODE
FROM TDDJ_TDDJDA T
WHERE NOT EXISTS
(SELECT 1 FROM LANDREG.TDDJ_TDDJDA_EXT E WHERE E.TDDJID = T.TDDJID)
UNION ALL
SELECT T.TDDJID, E.FILEBARCODE
FROM LANDREG.TDDJ_TDDJDA T, LANDREG.TDDJ_TDDJDA_EXT E
WHERE T.TDDJID = E.TDDJID




这样就避免了对主表进行了全表扫描。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  SQL 左连接 sql优化