ITPub博客

首页 > 数据库 > Oracle > dblink对索引的影响

dblink对索引的影响

Oracle 作者:oraclesuperman 时间:2015-07-07 10:19:27 0 删除 编辑

如下查询:

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/ ,如需转载,请注明出处,否则将追究法律责任。

下一篇: shell循环
请登录后发表评论 登录
全部评论

注册时间:2015-03-20

  • 博文量
    178
  • 访问量
    422842