【问题标题】:Query rewrite and Tuning查询重写和调优
【发布时间】:2019-12-03 12:45:41
【问题描述】:

我有以下查询是性能下降的原因,有人可以帮助重写这个查询,以便它可以更好地执行。

SELECT * 
FROM   (SELECT ITEMDETAIL0_.depid AS COL_0_0_ 
        FROM   xxxxxxxxxx.rptdepitemdetails ITEMDETAIL0_ 
               cross join xxxxxxxxxx.xxxxxxxxxxorg ORGANIZATI1_ 
        WHERE  ITEMDETAIL0_.bankname =? 
               AND ITEMDETAIL0_.customerid = ORGANIZATI1_.id 
               AND ORGANIZATI1_.uniquename =? 
               AND ITEMDETAIL0_.createuser =? 
               AND ITEMDETAIL0_.createdate >=? 
               AND ITEMDETAIL0_.createdate <=? 
               AND ( ITEMDETAIL0_.captureworktype IN ( ? ) ) 
               AND ( ITEMDETAIL0_.depstatus IN ( ?, ? ) ) 
        GROUP  BY ITEMDETAIL0_.depid, 
                  ITEMDETAIL0_.createdate 
        ORDER  BY ITEMDETAIL0_.createdate ASC) 
WHERE  ROWNUM <= ? 

【问题讨论】:

  • (1) 用您正在使用的数据库标记您的问题。 (2) 你为什么将JOIN 表示为CROSS JOIN?使用ON 子句!
  • 你需要说出你想要达到的目标。查看您的查询,我可以说让CROSS 加入无论如何都需要时间
  • 很多时候查询调整不依赖于重写查询,而是正确规范化数据和智能使用索引。
  • 能否添加查询的解释计划?正确诊断您的问题会容易得多。
  • @Jaisus - 添加了解释计划

标签: sql oracle query-tuning


【解决方案1】:

您可以编写如下查询以避免交叉连接和使用ON。

SELECT * 
FROM   (SELECT ITEMDETAIL0_.depid AS COL_0_0_ 
        FROM   xxxxxxxxxx.rptdepitemdetails ITEMDETAIL0_ 
               join xxxxxxxxxx.xxxxxxxxxxorg ORGANIZATI1_  on ITEMDETAIL0_.customerid = ORGANIZATI1_.id 
        WHERE  ITEMDETAIL0_.bankname =? 
               AND ORGANIZATI1_.uniquename =? 
               AND ITEMDETAIL0_.createuser =? 
               AND ITEMDETAIL0_.createdate >=? 
               AND ITEMDETAIL0_.createdate <=? 
               AND ( ITEMDETAIL0_.captureworktype IN ( ? ) ) 
               AND ( ITEMDETAIL0_.depstatus IN ( ?, ? ) ) 
        GROUP  BY ITEMDETAIL0_.depid, 
                  ITEMDETAIL0_.createdate 
        ORDER  BY ITEMDETAIL0_.createdate ASC) 
WHERE  ROWNUM <= ?

此外,在 xxxxxxxxxxorg 的 id 列和 rptdepitemdetails 表的 customerid 和 depid 上创建索引会有所帮助。

【讨论】:

  • 我已经为你格式化了你的 SQL 代码。顺便说一句,这很容易做到:只需突出显示您的查询并按下{} 按钮。
猜你喜欢
  • 1970-01-01
  • 2021-11-24
  • 2020-01-27
  • 1970-01-01
  • 2015-08-08
  • 2015-09-25
  • 1970-01-01
  • 2014-11-24
  • 1970-01-01
相关资源
最近更新 更多