我的查询有一个很好的执行计划......
当我接受此查询并通过数据库链接运行时,我丢失了执行计划中的索引......
有没有办法让这个查询保留索引?
问候
答案 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用于全表扫描。