这个语句可以优化吗???oracle的。这个运行太慢了。谢谢
SELECT   /*+   rule   */   b.* 
          FROM   CPK_DATA_LOTSUM   a,   CPK_DATA_RAW   b 
       WHERE   a.LOT_ID   =      ( 
    SELECT   /*+   rule   */   DISTINCT   a.LOT_ID 
    FROM   CPK_DATA_LOTSUM   a 
                WHERE   a.REPORT_TIME   > =   to_date( '2005/5/1 ', 'yyyy/mm/dd ') 
                      AND   a.REPORT_TIME       <   to_date( '2005/5/31 ', 'yyyy/mm/dd ')+1 
                         AND   ROWNUM    <=   1   ) 
                      AND   a.REPORT_TIME   > =   to_date( '2005/5/1 ', 'yyyy/mm/dd ') 
                      AND   a.REPORT_TIME       <   to_date( '2005/5/31 ', 'yyyy/mm/dd ')+1 
             AND   b.CHART_ID   =   a.CHART_ID 
          AND   b.LOT_ID   =   a.LOT_ID 
          AND   b.ROUTE_ID   =   a.ROUTE_ID 
          AND   b.ITEM_SEQ   =   a.ITEM_SEQ 
          AND   b.STEP_SEQ   =   a.STEP_SEQ 
          AND   b.REPORT_TIME   =   a.REPORT_TIME 
          AND   b.DCOP_MFLD_ID   =   a.DCOP_MFLD_ID 
------解决方案--------------------给,a.REPORT_TIME, b.REPORT_TIME 建索引即可
------解决方案--------------------你的数据库是什么版本? 为什么要加 rule提示?
------解决方案--------------------不要用Distinct
------解决方案--------------------DISTINCT  用 exist 替代
------解决方案--------------------用exists ,而且根据表中的数据 ,把可以过滤多的条件 放在sql语句的下面,因为语句是从下往上执行的,这样可以先过滤掉更多的数据,以后的执行会比较快。
------解决方案--------------------1 
 而且根据表中的数据 ,把可以过滤多的条件 放在sql语句的下面,因为语句是从下往上执行的,这样可以先过滤掉更多的数据,以后的执行会比较快。   
 2 
 为什么要加 rule提示? 
 建议取消 规则提示 现在都流行成本了  
 估计这个语句从早期数据库拿来的   
 3 与A表 相连接的表对应的字段是否有建立索引   
 5改成成本后 可以查看执行计划 你就可以哪条语句慢了
------解决方案--------------------一、建立时间字段的索引,效率可以提高大约30%; 
 二、你这个语句的关联怎么这么多?这么多字段合成的组合PK? 最好看一看是不是组合PK。 
 三、如果不是组合的PK,最好还是别改了。因为关系到你的业务逻辑,慢是慢了点,但不至于出错。 
 四、最后一个办法,把你用到的两个表优化一下,希望起到点作用。