这个语句可以优化吗???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,最好还是别改了。因为关系到你的业务逻辑,慢是慢了点,但不至于出错。
四、最后一个办法,把你用到的两个表优化一下,希望起到点作用。