Home > Blockchain >  ROW_NUMBER OVER Partition order by is causing performance issue
ROW_NUMBER OVER Partition order by is causing performance issue

Time:12-22

we have one sql and that is causing performance issue.ROW_NUMBER is main culprit,when i remove it i got rows in a min,though the number of records are more but with row_number to retirve 3k records it took 40 min of time.i tried with few options but it didn't imporve the performance.I don't know how to tackle that row_num order by.

WITH
    lines
    AS
        (SELECT oh.order_number || ool.line_number        AS key_id,
                ool.line_id,
                ool.header_id,
                oh.order_number,
                ool.line_number,
                ool.item_type_code,
                ool.inventory_item_id,
                ool.ship_from_org_id,
                TO_CHAR (x3h.poreceiptdate, 'mm/dd/yyyy') poreceiveddate,
                mc.segment2                               prodline
           FROM apps.oe_order_lines_all  ool
                LEFT JOIN apps.oe_order_headers_all oh
                    ON oh.header_id = ool.header_id
                LEFT JOIN apps.xxom_3lp_sym_ora_order_hdr x3h
                    ON ool.header_id = x3h.header_id
                LEFT JOIN apps.mtl_item_categories mic
                    ON     ool.inventory_item_id = mic.inventory_item_id
                       AND mic.organization_id = 85
                       AND mic.category_set_id = 1100000041
                LEFT JOIN apps.mtl_categories_b mc
                    ON mc.category_id = mic.category_id
          WHERE     ool.cancelled_flag = 'N'
                AND ool.item_type_code IN ('OPTION', 'CONFIG', 'STANDARD')
                AND ool.org_id IN (4622,
                                   5241,
                                   5259,
                                   6281,
                                   6421,
                                   8054,
                                   8060,
                                   8266,
                                   8284,
                                   8530,
                                   7165,
                                   7193,
                                   9287,
                                   4575,
                                   8272,
                                   8280,
                                   9907,
                                   9925,
                                   10907,
                                   10927,
                                   11911,
                                   11916,
                                   11924,
                                   15363,
                                   15366,
                                   4190,
                                   13063,
                                   16596,
                                   6741,
                                   4195,
                                   6761,
                                   90467486,
                                   9051,
                                   7824,
                                   10447,
                                   10452,
                                   7491,
                                   17302)
                AND ool.ship_from_org_id IN (4576,
                                             4623,
                                             4681,
                                             4682,
                                             5242,
                                             5260,
                                             6300,
                                             6422,
                                             7166,
                                             7194,
                                             8055,
                                             8061,
                                             8268,
                                             8285,
                                             8531,
                                             8545,
                                             9026,
                                             9288,
                                             9294,
                                             9295,
                                             9425,
                                             9745,
                                             10025,
                                             10707,
                                             10708,
                                             12891,
                                             12894,
                                             12895,
                                             12897,
                                             12898,
                                             12942,
                                             12962,
                                             13263,
                                             13282,
                                             13283,
                                             13284,
                                             13285,
                                             13286,
                                             13287,
                                             13502,
                                             13682,
                                             13702,
                                             13703,
                                             13763,
                                             149030,
                                             12989,
                                             4191,
                                             12449,
                                             16597,
                                             16598,
                                             16599,
                                             16600,
                                             12900,
                                             12893,
                                             12892,
                                             9047,
                                             12890,
                                             7487,
                                             9052,
                                             12901,
                                             7825,
                                             10448,
                                             10453,
                                             12899,
                                             17322)
                AND SUBSTR (mc.segment2, 1, 1) IN ('J')
                AND (   (ool.last_update_date > SYSDATE - 5)
                     OR (oh.last_update_date > SYSDATE - 5)
                     OR (x3h.last_update_date > SYSDATE - 5)))
SELECT *
  FROM (SELECT ROW_NUMBER ()
                   OVER (PARTITION BY header_id,
                                      line_id,
                                      ph.segment1,
                                      pla.line_num
                         ORDER BY line_id)
                   AS RowNbr,
               lines.*,
               pll.closed_code
                   po_line_status,
               TO_CHAR (pll.need_by_date, 'mm/dd/yyyy')
                   AS need_by_date,
               TO_CHAR (pll.promised_date, 'mm/dd/yyyy')
                   AS popromised_date,
               pla.line_num
                   po_line_number,
               TO_CHAR (pla.creation_date, 'mm/dd/yyyy')
                   pocreateddate,
               pla.unit_price,
               pla.quantity,
               ph.segment1
                   po_number,
               ph.authorization_status
                   po_status,
               ph.currency_code,
               ROUND (ph.rate, 4)
                   AS rate,
               (SELECT mc.segment1
                  FROM apps.mtl_item_categories   mic,
                       apps.mtl_category_sets_tl  mcs,
                       apps.mtl_categories_b      mc
                 WHERE     lines.inventory_item_id = mic.inventory_item_id
                       AND mic.organization_id = lines.ship_from_org_id
                       AND mic.category_set_id = mcs.category_set_id
                       AND mcs.language = 'US'
                       AND mcs.category_set_name = 'Inventory'
                       AND mic.category_id = mc.category_id)
                   commcode,
               (SELECT MAX (transaction_date)
                  FROM apps.rcv_transactions rcv
                 WHERE     rcv.po_header_id = ph.po_header_id
                       AND rcv.po_line_id = pla.po_line_id
                       AND transaction_type = 'RECEIVE'
                       AND ph.po_header_id = rcv.po_header_id
                       AND pla.po_line_id = rcv.po_line_id)
                   AS poactualdockdate,
               pv.vendor_name,
               pvs.vendor_site_code
                   vendor_site,
               CASE
                   WHEN ph.currency_code = 'USD' THEN 1
                   ELSE ROUND (gldr.conversion_rate, 4)
               END
                   conversion_rate,
               CASE
                   WHEN ph.currency_code = 'USD'
                   THEN
                       ROUND (pla.unit_price * pla.quantity * 1, 2)
                   ELSE
                       ROUND (
                             pla.unit_price
                           * pla.quantity
                           * gldr.conversion_rate,
                           2)
               END
                   usd_total_price,
               NVL (papf1.full_name, papf2.full_name)
                   buyer
          FROM lines
               LEFT JOIN apps.po_requisition_lines_all prl
                   ON TO_CHAR (lines.line_id) = prl.attribute1
               LEFT JOIN apps.po_line_locations_all pll
                   ON prl.line_location_id = pll.line_location_id
               LEFT JOIN apps.po_lines_all pla
                   ON pll.po_line_id = pla.po_line_id
               LEFT JOIN apps.po_headers_all ph
                   ON     pla.po_header_id = ph.po_header_id
                      AND pla.org_id = ph.org_id
               LEFT JOIN apps.ap_supplier_sites_all pvs
                   ON NVL (ph.vendor_site_id, prl.vendor_site_id) =
                      pvs.vendor_site_id
               LEFT JOIN apps.ap_supplier_sites_all pvs
                   ON NVL (ph.vendor_site_id, prl.vendor_site_id) =
                      pvs.vendor_site_id
               JOIN apps.ap_suppliers pv ON ph.vendor_id = pv.vendor_id
               LEFT JOIN apps.mtl_system_items_b msib
                   ON     lines.inventory_item_id = msib.inventory_item_id
                      AND lines.ship_from_org_id = msib.organization_id
               LEFT JOIN apps.per_all_people_f papf1
                   ON prl.suggested_buyer_id = papf1.person_id
               LEFT JOIN apps.per_all_people_f papf2
                   ON msib.buyer_id = papf2.person_id
               LEFT JOIN
               (SELECT *
                  FROM apps.gl_daily_rates gldr
                 WHERE     gldr.to_currency = 'USD'
                       AND conversion_type = 'Corporate') gldr
                   ON (    gldr.from_currency = ph.currency_code
                       AND TRUNC (ph.rate_date) =
                           TRUNC (gldr.conversion_date))
                           ) a
 WHERE RowNbr = 1

i tried with rank function and removing row_number.It impacted the output

CodePudding user response:

Yes, as i mentioned that when i comment it out row_number then data comes faster

| Id  | Operation                                        | Name                        | Starts | E-Rows |E-Bytes|E-Temp | Cost (%CPU)| E-Time   | A-Rows |   A-Time   | Buffers | Reads  |  OMem |  1Mem |  O/1/M   |
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT                                 |                             |      1 |        |       |       |  9265K(100)|          |   2935 |00:37:28.08 |      26M|    297K|       |       |          |
|   1 |  NESTED LOOPS                                    |                             |   1748 |        |       |       |            |          |   1739 |00:00:00.84 |   83859 |    518 |       |       |          |
|   2 |   NESTED LOOPS                                   |                             |   1748 |      1 |    82 |       |     7   (0)| 00:00:01 |   1739 |00:00:00.84 |   82120 |    518 |       |       |          |
|   3 |    NESTED LOOPS                                  |                             |   1748 |      1 |    63 |       |     5   (0)| 00:00:01 |   1739 |00:00:00.83 |   80247 |    518 |       |       |          |
|*  4 |     INDEX RANGE SCAN                             | MTL_ITEM_CATEGORIES_U1      |   1748 |      1 |    22 |       |     4   (0)| 00:00:01 |  42491 |00:00:00.61 |    5540 |    518 |       |       |          |
|*  5 |     TABLE ACCESS BY INDEX ROWID                  | MTL_CATEGORY_SETS_TL        |  42491 |      1 |    41 |       |     1   (0)| 00:00:01 |   1739 |00:00:00.08 |   74707 |      0 |       |       |          |
|*  6 |      INDEX UNIQUE SCAN                           | MTL_CATEGORY_SETS_TL_U1     |  42491 |      1 |       |       |     0   (0)|          |  42491 |00:00:00.04 |   32216 |      0 |       |       |          |
|*  7 |    INDEX UNIQUE SCAN                             | MTL_CATEGORIES_B_U1         |   1739 |      1 |       |       |     1   (0)| 00:00:01 |   1739 |00:00:00.01 |    1873 |      0 |       |       |          |
|   8 |   TABLE ACCESS BY INDEX ROWID                    | MTL_CATEGORIES_B            |   1739 |      1 |    19 |       |     2   (0)| 00:00:01 |   1739 |00:00:00.01 |    1739 |      0 |       |       |          |
|   9 |  SORT AGGREGATE                                  |                             |   2744 |      1 |    27 |       |            |          |   2744 |00:00:02.20 |   41381 |    301 |       |       |          |
|* 10 |   TABLE ACCESS BY INDEX ROWID                    | RCV_TRANSACTIONS            |   2744 |      1 |    27 |       |     6   (0)| 00:00:01 |   1821 |00:00:02.20 |   41381 |    301 |       |       |          |
|* 11 |    INDEX RANGE SCAN                              | RCV_TRANSACTIONS_N5         |   2744 |      4 |       |       |     3   (0)| 00:00:01 |   3646 |00:00:02.06 |   39812 |    270 |       |       |          |
|* 12 |  VIEW                                            |                             |      1 |     51 | 31314 |       |  9265K  (1)| 00:06:02 |   2935 |00:37:28.08 |      26M|    297K|       |       |          |
|* 13 |   WINDOW SORT PUSHED RANK                        |                             |      1 |     51 | 25755 |       |  9265K  (1)| 00:06:02 |   2935 |00:37:27.17 |      26M|    296K|  8841K|  1162K|     1/0/0|
|  14 |    NESTED LOOPS OUTER                            |                             |      1 |     51 | 25755 |       |  9265K  (1)| 00:06:02 |  16980 |00:01:42.38 |      26M|    296K|       |       |          |
|  15 |     NESTED LOOPS OUTER                           |                             |      1 |     51 | 24939 |       |  9265K  (1)| 00:06:02 |  16980 |00:01:42.34 |      26M|    296K|       |       |          |
|  16 |      NESTED LOOPS OUTER                          |                             |      1 |     51 | 24633 |       |  9265K  (1)| 00:06:02 |  16980 |00:01:42.32 |      26M|    296K|       |       |          |
|  17 |       NESTED LOOPS OUTER                         |                             |      1 |     32 | 14688 |       |  9265K  (1)| 00:06:02 |   5081 |00:04:23.98 |      26M|    296K|       |       |          |
|  18 |        NESTED LOOPS OUTER                        |                             |      1 |      3 |  1305 |       |  9265K  (1)| 00:06:02 |   2936 |00:07:11.30 |      26M|    296K|       |       |          |
|  19 |         NESTED LOOPS OUTER                       |                             |      1 |      3 |  1170 |       |  9265K  (1)| 00:06:02 |   2936 |00:07:02.75 |      25M|    296K|       |       |          |
|  20 |          NESTED LOOPS                            |                             |      1 |      3 |  1131 |       |  9265K  (1)| 00:06:02 |   2936 |00:07:02.61 |      25M|    296K|       |       |          |
|  21 |           VIEW                                   |                             |      1 |      3 |  1041 |       |  9265K  (1)| 00:06:02 |    448K|00:16:04.92 |      25M|    296K|       |       |          |
|  22 |            NESTED LOOPS OUTER                    |                             |      1 |      3 |   918 |       |  9265K  (1)| 00:06:02 |    448K|00:16:04.47 |      25M|    296K|       |       |          |
|  23 |             NESTED LOOPS OUTER                   |                             |      1 |      3 |   753 |       |  9265K  (1)| 00:06:02 |    448K|00:16:04.12 |      25M|    296K|       |       |          |
|  24 |              NESTED LOOPS OUTER                  |                             |      1 |      3 |   642 |       |  9265K  (1)| 00:06:02 |    448K|00:16:03.56 |      25M|    296K|       |       |          |
|  25 |               NESTED LOOPS OUTER                 |                             |      1 |      3 |   540 |       |  9265K  (1)| 00:06:02 |    448K|00:16:02.92 |      25M|    296K|       |       |          |
|* 26 |                FILTER                            |                             |      1 |        |       |       |            |          |    447K|00:13:31.89 |      25M|    296K|       |       |          |
|  27 |                 NESTED LOOPS OUTER               |                             |      1 |      3 |   492 |       |  9265K  (1)| 00:06:02 |    535K|00:13:53.58 |      25M|    296K|       |       |          |
|  28 |                  NESTED LOOPS OUTER              |                             |      1 |      3 |   372 |       |  9265K  (1)| 00:06:02 |    535K|00:13:52.23 |      24M|    296K|       |       |          |
|* 29 |                   FILTER                         |                             |      1 |        |       |       |            |          |    535K|00:13:31.84 |      23M|    289K|       |       |          |
|* 30 |                    HASH JOIN RIGHT OUTER         |                             |      1 |      3 |   306 |   174M|  9265K  (1)| 00:06:02 |     31M|00:36:25.36 |      23M|    289K|   343M|    14M|     1/0/0|
|* 31 |                     TABLE ACCESS FULL            | XXOM_3LP_SYM_ORA_ORDER_HDR  |      1 |   5553K|   111M|       |   205K  (1)| 00:00:09 |   5499K|00:00:03.66 |     423K|      0 |       |       |          |
|* 32 |                     HASH JOIN RIGHT OUTER        |                             |      1 |   3736K|   288M|   194M|  9005K  (1)| 00:05:52 |     31M|00:36:05.83 |      22M|    289K|   401M|    14M|     1/0/0|
|  33 |                      TABLE ACCESS FULL           | OE_ORDER_HEADERS_ALL        |      1 |   6382K|   121M|       |   205K  (1)| 00:00:09 |   6353K|00:00:02.41 |     429K|      0 |       |       |          |
|  34 |                      INLIST ITERATOR             |                             |      1 |        |       |       |            |          |     31M|00:35:45.93 |      22M|    289K|       |       |          |
|* 35 |                       TABLE ACCESS BY INDEX ROWID| OE_ORDER_LINES_ALL          |    195 |   3736K|   217M|       |  8750K  (1)| 00:05:42 |     31M|00:35:50.09 |      22M|    289K|       |       |          |
|* 36 |                        INDEX RANGE SCAN          | OE_ORDER_LINES_X101         |    195 |     28M|       |       | 77180   (1)| 00:00:04 |     41M|00:01:46.97 |     113K|  79464 |       |       |          |
|* 37 |                   INDEX RANGE SCAN               | MTL_ITEM_CATEGORIES_U1      |    535K|      1 |    22 |       |     3   (0)| 00:00:01 |    532K|00:00:18.45 |    1590K|   6970 |       |       |          |
|  38 |                  TABLE ACCESS BY INDEX ROWID     | MTL_CATEGORIES_B            |    535K|      1 |    40 |       |     2   (0)| 00:00:01 |    532K|00:00:01.18 |     873K|      0 |       |       |          |
|* 39 |                   INDEX UNIQUE SCAN              | MTL_CATEGORIES_B_U1         |    535K|      1 |       |       |     1   (0)| 00:00:01 |    532K|00:00:00.63 |     341K|      0 |       |       |          |
|  40 |                TABLE ACCESS BY INDEX ROWID       | PO_REQUISITION_LINES_ALL    |    447K|      1 |    16 |       |     3   (0)| 00:00:01 |   3264 |00:00:01.12 |     205K|     11 |       |       |          |
|* 41 |                 INDEX RANGE SCAN                 | PO_REQUISITION_LINES_ALL_X3 |    447K|      1 |       |       |     2   (0)| 00:00:01 |   3264 |00:00:00.99 |     201K|      9 |       |       |          |
|  42 |               TABLE ACCESS BY INDEX ROWID        | PO_LINE_LOCATIONS_ALL       |    448K|      1 |    34 |       |     2   (0)| 00:00:01 |   2936 |00:00:00.38 |    8724 |     12 |       |       |          |
|* 43 |                INDEX UNIQUE SCAN                 | PO_LINE_LOCATIONS_U1        |    448K|      1 |       |       |     1   (0)| 00:00:01 |   2936 |00:00:00.16 |    4986 |      0 |       |       |          |
|  44 |              TABLE ACCESS BY INDEX ROWID         | PO_LINES_ALL                |    448K|      1 |    37 |       |     2   (0)| 00:00:01 |   2936 |00:00:00.52 |    9324 |    165 |       |       |          |
|* 45 |               INDEX UNIQUE SCAN                  | PO_LINES_U1                 |    448K|      1 |       |       |     1   (0)| 00:00:01 |   2936 |00:00:00.14 |    4844 |      1 |       |       |          |
|* 46 |             TABLE ACCESS BY INDEX ROWID          | PO_HEADERS_ALL              |    448K|      1 |    55 |       |     2   (0)| 00:00:01 |   2936 |00:00:00.26 |    7659 |     22 |       |       |          |
|* 47 |              INDEX UNIQUE SCAN                   | PO_HEADERS_U1               |    448K|      1 |       |       |     1   (0)| 00:00:01 |   2936 |00:00:00.13 |    4674 |      0 |       |       |          |
|  48 |           TABLE ACCESS BY INDEX ROWID            | AP_SUPPLIERS                |    448K|      1 |    30 |       |     1   (0)| 00:00:01 |   2936 |00:00:00.22 |    4204 |      0 |       |       |          |
|* 49 |            INDEX UNIQUE SCAN                     | AP_SUPPLIERS_U1             |    448K|      1 |       |       |     0   (0)|          |   2936 |00:00:00.11 |    1268 |      0 |       |       |          |
|  50 |          TABLE ACCESS BY INDEX ROWID             | MTL_SYSTEM_ITEMS_B          |   2936 |      1 |    13 |       |     3   (0)| 00:00:01 |   2936 |00:00:00.13 |    7421 |      1 |       |       |          |
|* 51 |           INDEX UNIQUE SCAN                      | MTL_SYSTEM_ITEMS_B_U1       |   2936 |      1 |       |       |     2   (0)| 00:00:01 |   2936 |00:00:00.03 |    5908 |      0 |       |       |          |
|  52 |         TABLE ACCESS BY INDEX ROWID              | GL_DAILY_RATES              |   2936 |      1 |    45 |       |    24   (0)| 00:00:01 |   2506 |00:00:06.66 |     326K|      0 |       |       |          |
|* 53 |          INDEX RANGE SCAN                        | GL_DAILY_RATES_U1           |   2936 |      1 |       |       |    23   (0)| 00:00:01 |   2506 |00:00:06.89 |     325K|      0 |       |       |          |
|  54 |        TABLE ACCESS BY INDEX ROWID               | PER_ALL_PEOPLE_F            |   2936 |     10 |   240 |       |    12   (0)| 00:00:01 |   3197 |00:00:00.02 |    3187 |      2 |       |       |          |
|* 55 |         INDEX RANGE SCAN                         | XXPO_PER_ALL_PEOPLE_F_N1    |   2936 |     10 |       |       |     2   (0)| 00:00:01 |   3197 |00:00:00.01 |     578 |      0 |       |       |          |
|  56 |       TABLE ACCESS BY INDEX ROWID                | PER_ALL_PEOPLE_F            |   5081 |      1 |    24 |       |    12   (0)| 00:00:01 |  15096 |00:00:00.02 |   15414 |      5 |       |       |          |
|* 57 |        INDEX RANGE SCAN                          | XXPO_PER_ALL_PEOPLE_F_N1    |   5081 |     10 |       |       |     2   (0)| 00:00:01 |  15096 |00:00:00.01 |     970 |      0 |       |       |          |
|* 58 |      INDEX UNIQUE SCAN                           | AP_SUPPLIER_SITES_U1        |  16980 |      1 |     6 |       |     1   (0)| 00:00:01 |  16980 |00:00:00.02 |    2609 |      0 |       |       |          |
|  59 |     TABLE ACCESS BY INDEX ROWID                  | AP_SUPPLIER_SITES_ALL       |  16980 |      1 |    16 |       |     2   (0)| 00:00:01 |  16980 |00:00:00.03 |   20748 |      0 |       |       |          |
|* 60 |      INDEX UNIQUE SCAN                           | AP_SUPPLIER_SITES_U1        |  16980 |      1 |       |       |     1   (0)| 00:00:01 |  16980 |00:00:00.01 |    2609 |      0 |       |       |          |

CodePudding user response:

when i comment out row_number and order by it throw data very quickly.i don't know how to get rid of that

  • Related