Sql 调整长时间运行的查询

Sql 调整长时间运行的查询,sql,oracle,informatica,Sql,Oracle,Informatica,我从生产团队那里得到了这个用于调优的查询,我无法访问生产和其他内容,我必须将查询交给生产人员执行,他们期待着奇迹的出现。问题是TEST_表包含9800万条记录,这个查询用于informatica并创建了一个巨大的缓存。是否有任何方法可以更好地编写查询,只要看看查询。我知道调整需要很多东西和信息,但这就是我得到的全部信息。:)数据库是Oracle10g.正如Podiluska所说,在看不到查询计划或添加索引的情况下优化查询有点费心 但是,似乎确实存在一些冗余的“按顺序”操作:非常内部的查询有: S

我从生产团队那里得到了这个用于调优的查询,我无法访问生产和其他内容,我必须将查询交给生产人员执行,他们期待着奇迹的出现。问题是TEST_表包含9800万条记录,这个查询用于informatica并创建了一个巨大的缓存。是否有任何方法可以更好地编写查询,只要看看查询。我知道调整需要很多东西和信息,但这就是我得到的全部信息。:)数据库是Oracle10g.

正如Podiluska所说,在看不到查询计划或添加索引的情况下优化查询有点费心

但是,似乎确实存在一些冗余的“按顺序”操作:非常内部的查询有:

SELECT a AS a,
   b AS b,
   c AS c,
   d AS d,
   e AS e,
   f AS f,
   g AS g,
   h AS h
FROM ( 
   SELECT P.*,
      ROW_NUMBER() OVER (PARTITION BY p.a, RANK_NM 
      ORDER BY P.ID DESC) RW_NUM 
   FROM ( 
      SELECT T.a,
         T.b,
         T.c,
         T.d,
         T.e,
         T.f,
         T.g,
         T.h,
         T.ID
         DENSE_RANK() over (PARTITION BY T.a 
         ORDER BY T.b, T.c, T.d
         , T.e, T.f, T.g, T.h
         DESC) RANK_NM 
      FROM TEST_TABLE T ) p) Y 
WHERE RW_NUM = 1
外部的查询具有:

ORDER BY T.b, T.c, T.d
         , T.e, T.f, T.g, T.h
         DESC)

查询优化器可能忽略了内部order by,但是如果您可以删除order by语句,您可能会得到一些改进,特别是如果没有匹配的索引。

除非您隐藏了其他字段,否则此查询真正做的是

ORDER BY P.ID DESC
如果有更多的领域,内部分析功能是多余的,正如内维尔所指出的。你可以这样重写它:

SELECT DISTINCT a, b, c, d, e, f, g, h FROM TEST_TABLE

What where子句在Informatica中使用SQ?此查询在Informatica中使用,sql覆盖内部顺序by在稠密_秩窗口函数中使用,因此查询优化器不能忽略它。需要计算秩NM值,然后在外部行数窗口函数中使用该值。
SELECT
  a, b, c, d, e, f, g, h, extra1, extra2
FROM
(
  SELECT
    a, b, c, d, e, f, g, h, extra1, extra2,
    ROW_NUMBER() OVER(PARTITION BY a, b, c, d, e, f, g, h ORDER BY ID DESC) RW_NUM
  FROM TEST_TABLE
)
WHERE RW_NUM = 1