对于几个本库表关联dblink远程表批量查询慢的问题
select m.cusNo, p.name, t.salary
from baseinfo@bigdata p, moneyPay@bigdata t, emp m
where p.id = t.id
and p.cusNo = m.ssno
and m.cusNo in ('A001', 'A002', 'A003');
baseinfo p表、moneyPay t 表都是远程表;emp m 是本库表。
如果三个表的数据量少的情况下,效率还算可以。要是三个表的数据量很大,效率就慢了。
解决思路:
不用本库表与远程表做条件关联,先把几个远程表间关联,得出想要的结果集,将其作为临时表,与本库的表再作关联。
select m.cusNo, tt.name, tt.salary
from (select p.cusNo, p.name, t.salary
from baseinfo@bigdata p, moneyPay@bigdata t
where p.id = t.id) tt,
emp m
where m.ssno = tt.cusNo
and m.cusNo in ('A001', 'A002', 'A003');
对于这个sql,查询数据量少,效率可能很慢。
因为大部分时间耗费在dblink搬数据上,所以查询3条数据,与查询1万条数据,效率差异上就不大了。
这种方式适合批量跑数。