首页 > 数据库 > Oracle > dblink对索引的影响
如下查询:
a,b表做过同义词 ,都是通过dblink查询的
sql1 :
SQL code
select a.name b.*
from a, b
where a.id = b.id
where b.mtime < to_date('20050501', 'yyyy-mm-dd')
group by a.name
--0.1s内出结果
sql2:
SQL code
select *
from (select a.name b.*
from a, b
where a.id = b.id
where b.mtime < to_date('20050501', 'yyyy-mm-dd')
group by a.name)
-- 出不来结果 (不是慢,a表300w,b表900w)
一开始不了解,弄了很久,发现是dblink 影响了执行计划,
针对sql2 查询慢的解决办法如下(hint):
SQL code
select *
from (select /*+ driving_site(a) +driving_site(b)*/ a.name b.*
from a, b
where a.id = b.id
where b.mtime < to_date('20050501', 'yyyy-mm-dd')
group by a.name)
加上 driving_site 强制与ORACLE所选择的位置不同的表进行查询执行. 好了速度起来了 执行计划中也可以看到 走了 a,b表的索引!
但是新的问题出现了,我需要利用 sql2的查询结果做一个连接查询:
SQL code
select * from(
select *
from (select /*+ driving_site(a) +driving_site(b)*/ a.name b.*
from a, b
where a.id = b.id
where b.mtime < to_date('20050501', 'yyyy-mm-dd')
group by a.name)) t_main left join t_task
on t_task.name=t_main.name
ps:t_task是两个本地表联合查询出来的结果,0.05s内出结果, 这里整个sql的执行计划 仿佛回到了 sql1,为 filter ,remote ,当去掉 left join 后面一截时 整个查询、执行计划 正常 ,速度很快,求解,谢谢 !!
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/29313086/viewspace-1725293/ ,如需转载,请注明出处,否则将追究法律责任。