Oracle数据库链接上的Oracle查询丢失索引并执行全表扫描

时间:2014-06-25 04:18:21

标签: sql oracle

我的查询有一个很好的执行计划...... enter image description here

当我接受此查询并通过数据库链接运行时,我丢失了执行计划中的索引......

enter image description here

有没有办法让这个查询保留索引?

问候

1 个答案:

答案 0 :(得分:3)

您的查询必须是这样的,

SELECT  /*+ DRIVING_SITE(thead) */ *
    FROM thead@ORPMYRP.CMLTD.NET.AU 
    WHERE business_part_date=trunk(sysdate) 
     and processed_ind='N';

当子查询到位时,或者使用下面的Global hint

 SELECT /*+ DRIVING_SITE(a.thead) */ *
 FROM 
  (SELECT * FROM thead@ORPMYRP.CMLTD.NET.AU 
    WHERE business_part_date=trunk(sysdate) 
    and processed_ind='N') a

当您使用如下所示时,

 SELECT /*+ DRIVING_SITE(a) */ *
 FROM 
  (SELECT * FROM thead@ORPMYRP.CMLTD.NET.AU 
    WHERE business_part_date=trunk(sysdate) 
    and processed_ind='N') a

提示变得无用,因为别名a在HINT中没有意义,因为它不引用表而是引用子查询的结果。
现在远程数据库中的AU表的整行都被发送到本地。所以这意味着,索引现在没用了,所以oracle用于全表扫描。