Oracle:SQL优化 - 第2部分

时间:2011-10-13 00:25:47

标签: sql oracle

如何在下面优化此SQL?这个查询需要永远运行:(

SELECT DISTINCT CONNECT_BY_ROOT a.dst_ID_key AS root_ID_key, a.src_ID_key
  FROM fact_table a
  CONNECT BY NOCYCLE PRIOR a.src_ID_key = a.dst_ID_key
   START WITH a.dst_ID_key IN (SELECT b.ID_key
                           FROM TableA b
                           JOIN TableB c
                             ON (c.name = b.name AND c.school = b.school)
                          WHERE b.status = 'Active')

IN子句中的查询运行时间不到5秒,并返回3000行。和FACT_TABLE包含20M的记录。

提前致谢。 :)

1 个答案:

答案 0 :(得分:0)

您是否获得性能调整EM包的许可?如果是这样,我将首先执行查询并运行SQL Tuning Advisor。在不了解更多关于表和索引的情况下,很难用SQL语句来帮助你。

那就是说,当你用IN(SUBQUERY)过滤时,事情往往会变慢。从逻辑上讲,该子查询是针对每个可能的结果执行的。如果你可以重写它以便不在那里使用子查询,那么你可能会有更好的运气;我很幸运将这样的子查询转换为非分层查询中的JOIN语句。