oracle左连接优化,关于SQL左连接效率问题
项⽬在开发新功能,涉及到⼀张表,⾥⾯数据有⼀百多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)
sql left join 多表连接UNION ALL
SELECT T.TDDJID, E.FILEBARCODE
FROM LANDREG.TDDJ_TDDJDA T, LANDREG.TDDJ_TDDJDA_EXT E
WHERE T.TDDJID = E.TDDJID
这样就避免了对主表进⾏了全表扫描。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论