0

I have the below query that is the cause of performance degradation, can someone help to rewrite this query so that it could perform better.

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 <= ? 

enter image description here

1 Answers1

0

You can write query as follow to avoid cross join and using 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 <= ?

Also, creating indexes on id column of xxxxxxxxxxorg and customerid and depid of rptdepitemdetails tables would help.

Jaisus
  • 1,019
  • 5
  • 14