Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Помогите оптимизировать запрос / 3 сообщений из 3, страница 1 из 1
14.10.2016, 10:46
    #39326857
Rog_A
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите оптимизировать запрос
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
SELECT  
 'Y' as selected,
           CASE PK_INTERNET.get_doc_version(o.order_id)
                      WHEN '2' THEN o.outerid
                      WHEN '4' THEN o.outerid
                      WHEN '3' THEN opv7.opvalue
                    END as outerid,
         o.outerid as konosament,
         CASE
            WHEN o.order_id IN (
                   SELECT osl1.order_id
                     FROM o_status_log osl1,
                          o_status_log osl2,
                          orders o
                    WHERE osl1.order_id = osl2.order_id
                      AND osl1.os_code = 'WRQST_CRTD'
                      AND osl2.os_code = 'WRQST_WAIT'
                      AND osl2.osl_id < osl1.osl_id
                      AND osl1.order_id = o.order_id
                      AND o.os_code = 'WRQST_CRTD')
               THEN 'Y'
            ELSE 'N'
         END AS repeat,
         o.os_code, 
         DECODE(os.os_code,
           'DOC_STORN', DECODE(o.hasremoteitems, 'Y', '&#199;&#224;&#234;&#224;&#231; &#238;&#242;&#236;&#229;&#237;&#229;&#237; &#234;&#235;&#232;&#229;&#237;&#242;&#238;&#236; (&#211;&#209;)',
             CASE
               WHEN (SELECT DISTINCT (og.order_id)
                       FROM o_good_item og 
                      WHERE og.order_id = o.order_id
                        AND og.quantity > 0
                        AND NVL(og.st_code, 'N') <> 'TRASH') IS NULL THEN '&#196;&#238;&#234;&#243;&#236;&#229;&#237;&#242; &#241;&#242;&#238;&#240;&#237;&#232;&#240;&#238;&#226;&#224;&#237;'
               ELSE '&#199;&#224;&#234;&#224;&#231; &#238;&#242;&#236;&#229;&#237;&#229;&#237; &#234;&#235;&#232;&#229;&#237;&#242;&#238;&#236; (&#203;&#209;)'
             END),
           'ZEXPIRED', DECODE(o.hasremoteitems, 'Y', '&#199;&#224;&#234;&#224;&#231; &#238;&#242;&#236;&#229;&#237;&#229;&#237;. &#200;&#241;&#242;&#229;&#234; &#241;&#240;&#238;&#234; &#245;&#240;&#224;&#237;&#229;&#237;&#232;&#255; &#242;&#238;&#226;&#224;&#240;&#224; (&#211;&#209;)', 
           '&#199;&#224;&#234;&#224;&#231; &#238;&#242;&#236;&#229;&#237;&#229;&#237;. &#200;&#241;&#242;&#229;&#234; &#241;&#240;&#238;&#234; &#245;&#240;&#224;&#237;&#229;&#237;&#232;&#255; &#242;&#238;&#226;&#224;&#240;&#224; (&#203;&#209;)'), 
           os.NAME) AS os_name,
         os.os_comment as action,
         o.chainnum, o.docdate,
         TO_CHAR (ord.order_id) AS cust_ord_id,
         CASE WHEN (o.os_code = 'WRQST_CRTD'
                    and exists(select *
                               from staff t, tsys_profiles prf, tsys_usrprof_link plk
                               where plk.staff_id = t.staff_id and
                                     prf.prof_code = plk.prof_code and
                                     prf.prof_code <> 'SELLER' and
                                     (t.user_code = PK_MASTERDATA.GET_USERCODE))) OR
                    (o.os_code = 'WRQST_ACPT'
                     AND ord.os_code = 'ZORDR_OPEN'
                     AND NVL(opv9.opvalue,'N') <> 'Y')
                    AND (NVL(b_stop.opvalue, 'N') <> 'Y')
         THEN
           (   CASE PK_INTERNET.get_doc_version(o.order_id)
                      WHEN '4' THEN 'Z' 
                      ELSE 'Y'  
               END                        
           ) 
           ELSE 'N'
         END AS LCHNG_ACCESS,
         CASE WHEN ((o.os_code = 'PWRQT_DLVD') or
                    (o.os_code = 'PWRQT_DLVR'
                     and exists(select *
                     from staff t, tsys_profiles prf, tsys_usrprof_link plk
                     where plk.staff_id = t.staff_id and
                           prf.prof_code = plk.prof_code and
                           prf.prof_code NOT IN ('SELLER', 'STOCKMAN') and
                           (t.user_code = PK_MASTERDATA.GET_USERCODE))))
                     AND ord.os_code = 'ZORDR_OPEN'
                     AND (NVL(b_stop.opvalue, 'N') <> 'Y')
                     AND NVL(opv9.opvalue,'N') <> 'Y'
         THEN 'Y' ELSE 'N'
         END AS RCHNG_ACCESS,
         orders_proc.fn_get_RDLVD_access(ord.order_id, o.order_id, ord3.order_id) RDLVD_ACCESS,
         CASE WHEN ord.os_code = 'ZORDR_PAYD' AND
           (o.hasremoteitems IS NULL OR o.hasremoteitems = 'N')
         THEN 'Y' ELSE 'N'
         END AS LRCVD_ACCESS,
          CASE WHEN (ord.os_code = 'ZORDR_PAYD' AND 
           o.hasremoteitems = 'Y')
         THEN 'Y' ELSE 'N'
         END AS RRCVD_ACCESS,
         (SELECT COUNT (*)
            FROM o_good_item og
           WHERE og.order_id = o.order_id) AS ccount,
         (SELECT SUM (og.quantity)
            FROM o_good_item og
           WHERE og.order_id = o.order_id) AS qnt,
         (SELECT SUM (amount)
            FROM o_good_item
           WHERE ignore <> 'Y' AND order_id = o.order_id) AS o_amnt,
         o.changedatetime, o.finish_date AS finish_date, o.changeusercode,
         TO_CHAR (o.order_id) AS order_id, 
         TO_CHAR(ord2.order_id) as ZDLVGI_NUM,
         os.color,
         ord3.order_id as ZDLVGR_ID,
         opv5.opvalue as ZDLVGR_SAPID,
         CASE
             WHEN ord2.os_code = 'ZDLVGI_FIN' THEN 'Y' ELSE 'N'
         END AS ZDLVGI_FIN,
         CASE WHEN (nvl(opv9.opvalue,'N') = 'N') or (o.os_code IN ('WRQST_CRTD','PWRQT_DLVR','PWRQT_DLVD'))
         THEN 'Y' ELSE 'N'
         END AS PRNT_ACCESS,
         nvl(opv8.opvalue,'N') AS LEGAL_PERSON,
         (case
         when (select nvl(max(opvw.opvalue),'') as op_code from op_values opvw where opvw.op_code = 'IM_WERK' and opvw.order_id = o.order_id)=get_werk_base then 'Y'
           else 'N' end)as wbtrmnl,
         nvl(opv9.opvalue,'N') AS ONLINE_PAY,
         CASE WHEN ( o.os_code IN ('WRQST_ACPT', 'PWRQT_DLVD')  AND nvl(opv9.opvalue,'N') = 'Y'
            AND exists(SELECT * FROM orders zpp WHERE zpp.parent_order_id = o.order_id 
              AND zpp.ot_code = 'ZPPAY'
              AND zpp.os_code = 'ZPPAY_CRTD'))
         THEN 'Y' ELSE 'N'
         END AS ONLINE_ACCESS,
         CASE WHEN ( o.os_code IN ('WRQST_RCVD', 'PWRQT_PRCH')  AND nvl(opv9.opvalue,'N') = 'Y'
            AND exists(SELECT * FROM orders zpp WHERE zpp.parent_order_id = o.order_id 
              AND zpp.ot_code = 'ZPPAY'
              AND zpp.os_code = 'ZPPAY_CRTD'))
         THEN 'Y' ELSE 'N'
         END AS ONLINE_STORNO_ACCESS,
         CASE WHEN ( o.os_code IN ('WRQST_ACPT', 'PWRQT_DLVD', 'WRQST_RCVD', 'PWRQT_PRCH')  AND nvl(opv9.opvalue,'N') = 'Y'
            AND exists(SELECT * FROM orders zpp WHERE zpp.parent_order_id = o.order_id 
              AND zpp.ot_code = 'ZPPAY'
              AND zpp.os_code = 'ZPPAY_CRTD'))
         THEN 'Y' ELSE 'N'
         END AS ONLINE_RESEND_ACCESS,
                  CASE WHEN ( o.ot_code IN ('WRQST', 'PWRQT')  AND nvl(opv9.opvalue,'N') = 'Y'
            AND exists(SELECT * FROM orders zpp WHERE zpp.parent_order_id = o.order_id 
              AND zpp.ot_code = 'ZPPAY'
              AND zpp.os_code = 'ZPPAY_CRTD'))
         THEN 'Y' ELSE 'N'
         END AS ONLINE_ZPPAY_CRTD,
         CASE
             WHEN 0 = (select count(*) from op_values ov where ov.op_code = 'VITRINE' and ov.opvalue = 'Y' and ov.order_id = o.order_id)
                   THEN 'N'
             ELSE 'Y'
         END AS VITRINE

    FROM orders o
    JOIN order_status os
    ON o.os_code = os.os_code
    LEFT OUTER JOIN  op_values opv7
      ON opv7.order_id = o.order_id
     AND opv7.op_code = 'ORDER_HY'
    LEFT OUTER JOIN  op_values opv8
      ON opv8.order_id = o.order_id
     AND opv8.op_code = 'CORPORATE'
    LEFT OUTER JOIN  op_values opv9
      ON opv9.order_id = o.order_id
     AND opv9.op_code = 'ONLINE_PAY'
    LEFT JOIN orders ord
    ON o.order_id = ord.parent_order_id
    AND ord.ot_code = 'ZORDR'
    LEFT JOIN op_values opv 
    ON ord.order_id = opv.order_id
    AND opv.op_code = 'SAPORDNUM'
    left join orders ord2 on get_op_values(ord2.order_id, null, 'SAPORDNUM') = opv.opvalue
                         and ord2.chainnum <> o.chainnum
                         and ord2.ot_code = 'ZDLVGI'
                         and not (ord2.os_code in ('DOC_STORN','ZDLVGI_DEL'))
    left join op_values opv4
    on ((o.outerid = opv4.opvalue) or ('39|'||o.outerid = opv4.opvalue) or ('40|'||o.outerid = opv4.opvalue))
    and opv4.op_code = 'WEBORDNUM'
    and (( opv4.order_id is null and not exists (select 1 from orders os where opv4.order_id = os.order_id and os.ot_code = 'ZDLVGR')
       or( opv4.order_id is not null and exists (select 1 from orders os where opv4.order_id = os.order_id and os.ot_code = 'ZDLVGR'))))
    left JOIN orders ord3
    ON opv4.order_id = ord3.order_id
    AND ord3.ot_code = 'ZDLVGR'
    LEFT JOIN op_values opv5
    ON ord3.order_id = opv5.order_id
    AND opv5.op_code = 'SAPORDNUM'
    left join op_values b_stop on b_stop.order_id = o.order_id
                              and b_stop.op_code  = 'BITRIX_STOP'
   WHERE o.ot_code = 'WRQST' and exists
   (select null from op_values WRQST_DOC_VERS_opv3 
    where o.order_id = WRQST_DOC_VERS_opv3.order_id 
      AND WRQST_DOC_VERS_opv3.op_code = 'DOC_VERS' 
      AND WRQST_DOC_VERS_opv3.opvalue IN ('2','3','4'))
ORDER BY o.order_id


Падение производительности происходит на вызове функции: get_op_values
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
FUNCTION get_op_values (
  vorder_id    in  varchar2,
  vog_item_id  in  varchar2 default null,
  vop_code     in  varchar2 default 'DSCNT_NMBR')
  return varchar2
is
-- Purpose: Returns opvalue from op_values
--
-- MODIFICATION HISTORY
-- Person      Date        Comments
-- ---------   ----------  -------------------------------------------
-- Zakharov   23.01.2004  First edition
  ret_value     op_values.opvalue%type;
begin
  if vog_item_id is null then
    select MAX(opvalue)
      into ret_value
      from op_values
     where order_id = vorder_id and op_code = vop_code;
  else
    select MAX(opvalue)
      into ret_value
      from op_values
     where order_id = vorder_id
       and og_item_id = vog_item_id
       and op_code = vop_code;
  end if;
  return ret_value;
exception
  when no_data_found then
    return '';
end;


По сути ее можно заменить просто вызовом
Код: plsql
1.
2.
3.
4.
select MAX(opvalue)
      into ret_value
      from op_values
     where order_id = vorder_id and op_code = vop_code;

Но даже в этом случае лучше не становиться.
План всего запроса:
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
------------------------------------------------------------------------------------------------------------------------------------
| Id  | Operation                                 | Name                           | Rows  | Bytes |TempSpc| Cost (%CPU)| Time     |
------------------------------------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT                          |                                | 11522 |  8416K|       | 43966   (1)| 00:08:48 |
|*  1 |  TABLE ACCESS BY INDEX ROWID              | O_STATUS_LOG                   |     1 |    23 |       |     3   (0)| 00:00:01 |
|   2 |   NESTED LOOPS                            |                                |     1 |    63 |       |     9   (0)| 00:00:01 |
|   3 |    NESTED LOOPS                           |                                |     1 |    40 |       |     6   (0)| 00:00:01 |
|*  4 |     TABLE ACCESS BY INDEX ROWID           | ORDERS                         |     1 |    17 |       |     3   (0)| 00:00:01 |
|*  5 |      INDEX UNIQUE SCAN                    | SYS_C0010173                   |     1 |       |       |     2   (0)| 00:00:01 |
|   6 |     TABLE ACCESS BY INDEX ROWID           | O_STATUS_LOG                   |     1 |    23 |       |     3   (0)| 00:00:01 |
|*  7 |      INDEX RANGE SCAN                     | INU_O_STATUS_LOG_CODE_ORD_DATE |     1 |       |       |     2   (0)| 00:00:01 |
|*  8 |    INDEX RANGE SCAN                       | INU_O_STATUS_LOG_CODE_ORD_DATE |     1 |       |       |     2   (0)| 00:00:01 |
|   9 |  SORT UNIQUE NOSORT                       |                                |     1 |    12 |       |     5  (20)| 00:00:01 |
|* 10 |   TABLE ACCESS BY INDEX ROWID             | O_GOOD_ITEM                    |     2 |    24 |       |     4   (0)| 00:00:01 |
|* 11 |    INDEX RANGE SCAN                       | IF111O_GOOD_ITEM               |     2 |       |       |     3   (0)| 00:00:01 |
|  12 |  NESTED LOOPS                             |                                |     1 |    45 |       |     3   (0)| 00:00:01 |
|  13 |   NESTED LOOPS                            |                                |     1 |    31 |       |     3   (0)| 00:00:01 |
|  14 |    TABLE ACCESS BY INDEX ROWID            | STAFF                          |     1 |    15 |       |     2   (0)| 00:00:01 |
|* 15 |     INDEX UNIQUE SCAN                     | UI1STAFF                       |     1 |       |       |     1   (0)| 00:00:01 |
|* 16 |    INDEX RANGE SCAN                       | TSYS_USRPROF_LINK_PK           |     1 |    16 |       |     1   (0)| 00:00:01 |
|* 17 |   INDEX UNIQUE SCAN                       | SYS_C0012646                   |     1 |    14 |       |     0   (0)| 00:00:01 |
|  18 |  NESTED LOOPS                             |                                |     1 |    45 |       |     3   (0)| 00:00:01 |
|  19 |   NESTED LOOPS                            |                                |     1 |    31 |       |     3   (0)| 00:00:01 |
|  20 |    TABLE ACCESS BY INDEX ROWID            | STAFF                          |     1 |    15 |       |     2   (0)| 00:00:01 |
|* 21 |     INDEX UNIQUE SCAN                     | UI1STAFF                       |     1 |       |       |     1   (0)| 00:00:01 |
|* 22 |    INDEX RANGE SCAN                       | TSYS_USRPROF_LINK_PK           |     1 |    16 |       |     1   (0)| 00:00:01 |
|* 23 |   INDEX UNIQUE SCAN                       | SYS_C0012646                   |     1 |    14 |       |     0   (0)| 00:00:01 |
|  24 |  SORT AGGREGATE                           |                                |     1 |     6 |       |            |          |
|* 25 |   INDEX RANGE SCAN                        | IF111O_GOOD_ITEM               |     2 |    12 |       |     3   (0)| 00:00:01 |
|  26 |  SORT AGGREGATE                           |                                |     1 |     9 |       |            |          |
|  27 |   TABLE ACCESS BY INDEX ROWID             | O_GOOD_ITEM                    |     2 |    18 |       |     4   (0)| 00:00:01 |
|* 28 |    INDEX RANGE SCAN                       | IF111O_GOOD_ITEM               |     2 |       |       |     3   (0)| 00:00:01 |
|  29 |  SORT AGGREGATE                           |                                |     1 |    12 |       |            |          |
|* 30 |   TABLE ACCESS BY INDEX ROWID             | O_GOOD_ITEM                    |     2 |    24 |       |     4   (0)| 00:00:01 |
|* 31 |    INDEX RANGE SCAN                       | IF111O_GOOD_ITEM               |     2 |       |       |     3   (0)| 00:00:01 |
|  32 |  SORT AGGREGATE                           |                                |     1 |    24 |       |            |          |
|  33 |   TABLE ACCESS BY INDEX ROWID             | OP_VALUES                      |     1 |    24 |       |     4   (0)| 00:00:01 |
|* 34 |    INDEX RANGE SCAN                       | INU_OP_VALUES                  |     1 |       |       |     3   (0)| 00:00:01 |
|* 35 |  TABLE ACCESS BY INDEX ROWID              | ORDERS                         |     1 |    21 |       |     4   (0)| 00:00:01 |
|* 36 |   INDEX RANGE SCAN                        | IF138ORDERS                    |     1 |       |       |     3   (0)| 00:00:01 |
|* 37 |  TABLE ACCESS BY INDEX ROWID              | ORDERS                         |     1 |    21 |       |     4   (0)| 00:00:01 |
|* 38 |   INDEX RANGE SCAN                        | IF138ORDERS                    |     1 |       |       |     3   (0)| 00:00:01 |
|* 39 |  TABLE ACCESS BY INDEX ROWID              | ORDERS                         |     1 |    21 |       |     4   (0)| 00:00:01 |
|* 40 |   INDEX RANGE SCAN                        | IF138ORDERS                    |     1 |       |       |     3   (0)| 00:00:01 |
|* 41 |  TABLE ACCESS BY INDEX ROWID              | ORDERS                         |     1 |    21 |       |     4   (0)| 00:00:01 |
|* 42 |   INDEX RANGE SCAN                        | IF138ORDERS                    |     1 |       |       |     3   (0)| 00:00:01 |
|* 43 |  TABLE ACCESS BY INDEX ROWID              | OP_VALUES                      |     1 |    24 |       |     4   (0)| 00:00:01 |
|* 44 |   INDEX RANGE SCAN                        | INU_OP_VALUES                  |     1 |       |       |     3   (0)| 00:00:01 |
|  45 |  SORT ORDER BY                            |                                | 11522 |  8416K|  9232K| 43966   (1)| 00:08:48 |
|* 46 |   HASH JOIN RIGHT OUTER                   |                                | 11522 |  8416K|  5264K| 42149   (1)| 00:08:26 |
|* 47 |    TABLE ACCESS FULL                      | OP_VALUES                      |   149K|  3506K|       | 15564   (2)| 00:03:07 |
|* 48 |    HASH JOIN RIGHT OUTER                  |                                | 11274 |  7971K|       | 25935   (1)| 00:05:12 |
|  49 |     TABLE ACCESS BY INDEX ROWID           | ORDERS                         | 20403 |   259K|       |  1566   (1)| 00:00:19 |
|* 50 |      INDEX RANGE SCAN                     | IOT_CODE_ORDERS                | 20403 |       |       |    51   (0)| 00:00:01 |
|  51 |     NESTED LOOPS OUTER                    |                                | 11274 |  7827K|       | 24368   (1)| 00:04:53 |
|* 52 |      HASH JOIN OUTER                      |                                |  3758 |  2587K|       | 23542   (1)| 00:04:43 |
|  53 |       NESTED LOOPS OUTER                  |                                |   209 |   137K|       | 20876   (1)| 00:04:11 |
|  54 |        NESTED LOOPS SEMI                  |                                |   209 |   132K|       | 20319   (1)| 00:04:04 |
|  55 |         VIEW                              |                                |   843 |   516K|       | 18074   (1)| 00:03:37 |
|  56 |          NESTED LOOPS OUTER               |                                |   843 |   183K|       | 18074   (1)| 00:03:37 |
|  57 |           NESTED LOOPS OUTER              |                                |   843 |   163K|       | 15828   (1)| 00:03:10 |
|  58 |            NESTED LOOPS OUTER             |                                |   843 |   141K|       | 13886   (1)| 00:02:47 |
|  59 |             NESTED LOOPS OUTER            |                                |   843 |   121K|       | 11641   (1)| 00:02:20 |
|  60 |              NESTED LOOPS OUTER           |                                |   843 |   102K|       |  9395   (1)| 00:01:53 |
|* 61 |               HASH JOIN                   |                                |   843 | 84300 |       |  7149   (1)| 00:01:26 |
|  62 |                TABLE ACCESS FULL          | ORDER_STATUS                   |   666 | 24642 |       |     3   (0)| 00:00:01 |
|* 63 |                TABLE ACCESS BY INDEX ROWID| ORDERS                         |   843 | 53109 |       |  7146   (1)| 00:01:26 |
|* 64 |                 INDEX RANGE SCAN          | IOT_CODE_ORDERS                | 93192 |       |       |   225   (1)| 00:00:03 |
|  65 |               TABLE ACCESS BY INDEX ROWID | OP_VALUES                      |     1 |    24 |       |     3   (0)| 00:00:01 |
|* 66 |                INDEX RANGE SCAN           | INU_OP_VALUES                  |     1 |       |       |     2   (0)| 00:00:01 |
|  67 |              TABLE ACCESS BY INDEX ROWID  | OP_VALUES                      |     1 |    24 |       |     3   (0)| 00:00:01 |
|* 68 |               INDEX RANGE SCAN            | INU_OP_VALUES                  |     1 |       |       |     2   (0)| 00:00:01 |
|  69 |             TABLE ACCESS BY INDEX ROWID   | OP_VALUES                      |     1 |    24 |       |     3   (0)| 00:00:01 |
|* 70 |              INDEX RANGE SCAN             | INU_OP_VALUES                  |     1 |       |       |     2   (0)| 00:00:01 |
|* 71 |            TABLE ACCESS BY INDEX ROWID    | ORDERS                         |     1 |    27 |       |     3   (0)| 00:00:01 |
|* 72 |             INDEX RANGE SCAN              | IF138ORDERS                    |     1 |       |       |     2   (0)| 00:00:01 |
|  73 |           TABLE ACCESS BY INDEX ROWID     | OP_VALUES                      |     1 |    24 |       |     3   (0)| 00:00:01 |
|* 74 |            INDEX RANGE SCAN               | INU_OP_VALUES                  |     1 |       |       |     2   (0)| 00:00:01 |
|* 75 |         TABLE ACCESS BY INDEX ROWID       | OP_VALUES                      |    52 |  1248 |       |     3   (0)| 00:00:01 |
|* 76 |          INDEX RANGE SCAN                 | INU_OP_VALUES                  |     1 |       |       |     2   (0)| 00:00:01 |
|  77 |        TABLE ACCESS BY INDEX ROWID        | OP_VALUES                      |     1 |    24 |       |     3   (0)| 00:00:01 |
|* 78 |         INDEX RANGE SCAN                  | INU_OP_VALUES                  |     1 |       |       |     2   (0)| 00:00:01 |
|* 79 |       TABLE ACCESS BY INDEX ROWID         | ORDERS                         | 33625 |   985K|       |  2665   (1)| 00:00:32 |
|* 80 |        INDEX RANGE SCAN                   | IOT_CODE_ORDERS                | 34740 |       |       |    85   (0)| 00:00:02 |
|  81 |      VIEW                                 |                                |     3 |    18 |       |     0   (0)| 00:00:01 |
|  82 |       CONCATENATION                       |                                |       |       |       |            |          |
|* 83 |        FILTER                             |                                |       |       |       |            |          |
|* 84 |         TABLE ACCESS BY INDEX ROWID       | OP_VALUES                      |    14 |   336 |       |  3134   (1)| 00:00:38 |
|* 85 |          INDEX RANGE SCAN                 | IDX_OPVALUE                    |  8881 |       |       |    27   (0)| 00:00:01 |
|* 86 |         TABLE ACCESS BY INDEX ROWID       | ORDERS                         |     1 |    13 |       |     3   (0)| 00:00:01 |
|* 87 |          INDEX UNIQUE SCAN                | SYS_C0010173                   |     1 |       |       |     2   (0)| 00:00:01 |
|* 88 |          TABLE ACCESS BY INDEX ROWID      | ORDERS                         |     1 |    13 |       |     3   (0)| 00:00:01 |
|* 89 |           INDEX UNIQUE SCAN               | SYS_C0010173                   |     1 |       |       |     2   (0)| 00:00:01 |
|* 90 |        FILTER                             |                                |       |       |       |            |          |
|* 91 |         TABLE ACCESS BY INDEX ROWID       | OP_VALUES                      |    14 |   336 |       |  3134   (1)| 00:00:38 |
|* 92 |          INDEX RANGE SCAN                 | IDX_OPVALUE                    |  8881 |       |       |    27   (0)| 00:00:01 |
|* 93 |         TABLE ACCESS BY INDEX ROWID       | ORDERS                         |     1 |    13 |       |     3   (0)| 00:00:01 |
|* 94 |          INDEX UNIQUE SCAN                | SYS_C0010173                   |     1 |       |       |     2   (0)| 00:00:01 |
|* 95 |          TABLE ACCESS BY INDEX ROWID      | ORDERS                         |     1 |    13 |       |     3   (0)| 00:00:01 |
|* 96 |           INDEX UNIQUE SCAN               | SYS_C0010173                   |     1 |       |       |     2   (0)| 00:00:01 |
|* 97 |        FILTER                             |                                |       |       |       |            |          |
|* 98 |         TABLE ACCESS BY INDEX ROWID       | OP_VALUES                      |    13 |   312 |       |    42   (0)| 00:00:01 |
|* 99 |          INDEX RANGE SCAN                 | IDX_OPVALUE                    |    56 |       |       |    22   (0)| 00:00:01 |
|*100 |         TABLE ACCESS BY INDEX ROWID       | ORDERS                         |     1 |    13 |       |     3   (0)| 00:00:01 |
|*101 |          INDEX UNIQUE SCAN                | SYS_C0010173                   |     1 |       |       |     2   (0)| 00:00:01 |
|*102 |          TABLE ACCESS BY INDEX ROWID      | ORDERS                         |     1 |    13 |       |     3   (0)| 00:00:01 |
|*103 |           INDEX UNIQUE SCAN               | SYS_C0010173                   |     1 |       |       |     2   (0)| 00:00:01 |
------------------------------------------------------------------------------------------------------------------------------------



Predicate Information (identified by operation id):
---------------------------------------------------

1 - filter("OSL2"."OSL_ID"<"OSL1"."OSL_ID")
4 - filter("O"."OS_CODE"='WRQST_CRTD')
5 - access("O"."ORDER_ID"=:B1)
7 - access("OSL2"."OS_CODE"='WRQST_WAIT' AND "OSL2"."ORDER_ID"=:B1)
8 - access("OSL1"."OS_CODE"='WRQST_CRTD' AND "OSL1"."ORDER_ID"="O"."ORDER_ID")
filter("OSL1"."ORDER_ID"=:B1 AND "OSL1"."ORDER_ID"="OSL2"."ORDER_ID")
10 - filter("OG"."QUANTITY">0 AND NVL("OG"."ST_CODE",'N')<>'TRASH')
11 - access("OG"."ORDER_ID"=:B1)
15 - access("T"."USER_CODE"="PK_MASTERDATA"."GET_USERCODE"())
16 - access("PLK"."STAFF_ID"="T"."STAFF_ID")
filter("PLK"."PROF_CODE"<>'SELLER')
17 - access("PLK"."PROF_CODE"="PRF"."PROF_CODE")
filter("PRF"."PROF_CODE"<>'SELLER')
21 - access("T"."USER_CODE"="PK_MASTERDATA"."GET_USERCODE"())
22 - access("PLK"."STAFF_ID"="T"."STAFF_ID")
filter("PLK"."PROF_CODE"<>'SELLER' AND "PLK"."PROF_CODE"<>'STOCKMAN')
23 - access("PLK"."PROF_CODE"="PRF"."PROF_CODE")
filter("PRF"."PROF_CODE"<>'SELLER' AND "PRF"."PROF_CODE"<>'STOCKMAN')
25 - access("OG"."ORDER_ID"=:B1)
28 - access("OG"."ORDER_ID"=:B1)
30 - filter("IGNORE"<>'Y')
31 - access("ORDER_ID"=:B1)
34 - access("OPVW"."ORDER_ID"=:B1 AND "OPVW"."OP_CODE"='IM_WERK')
35 - filter("ZPP"."OT_CODE"='ZPPAY' AND "ZPP"."OS_CODE"='ZPPAY_CRTD')
36 - access("ZPP"."PARENT_ORDER_ID"=:B1)
37 - filter("ZPP"."OT_CODE"='ZPPAY' AND "ZPP"."OS_CODE"='ZPPAY_CRTD')
38 - access("ZPP"."PARENT_ORDER_ID"=:B1)
39 - filter("ZPP"."OT_CODE"='ZPPAY' AND "ZPP"."OS_CODE"='ZPPAY_CRTD')
40 - access("ZPP"."PARENT_ORDER_ID"=:B1)
41 - filter("ZPP"."OT_CODE"='ZPPAY' AND "ZPP"."OS_CODE"='ZPPAY_CRTD')
42 - access("ZPP"."PARENT_ORDER_ID"=:B1)
43 - filter("OV"."OPVALUE"='Y')
44 - access("OV"."ORDER_ID"=:B1 AND "OV"."OP_CODE"='VITRINE')
46 - access("ORD3"."ORDER_ID"="OPV5"."ORDER_ID"(+))
47 - filter("OPV5"."OP_CODE"(+)='SAPORDNUM')
48 - access("OPV4"."ORDER_ID"="ORD3"."ORDER_ID"(+))
50 - access("ORD3"."OT_CODE"(+)='ZDLVGR')
52 - access("OPV"."OPVALUE"="GET_OP_VALUES"(TO_CHAR("ORD2"."ORDER_ID"(+)),NULL,'SAPORDNUM'))
filter("ORD2"."CHAINNUM"(+)<>"O"."CHAINNUM")
61 - access("O"."OS_CODE"="OS"."OS_CODE")
63 - filter("O"."DOCDATE">=TO_DATE(' 2016-07-26 00:00:00', 'syyyy-mm-dd hh24:mi:ss') AND "O"."DOCDATE"<TO_DATE('
2016-10-02 00:00:00', 'syyyy-mm-dd hh24:mi:ss'))
64 - access("O"."OT_CODE"='WRQST')
66 - access("OPV7"."ORDER_ID"(+)="O"."ORDER_ID" AND "OPV7"."OP_CODE"(+)='ORDER_HY')
68 - access("OPV8"."ORDER_ID"(+)="O"."ORDER_ID" AND "OPV8"."OP_CODE"(+)='CORPORATE')
70 - access("OPV9"."ORDER_ID"(+)="O"."ORDER_ID" AND "OPV9"."OP_CODE"(+)='ONLINE_PAY')
71 - filter("ORD"."OT_CODE"(+)='ZORDR')
72 - access("O"."ORDER_ID"="ORD"."PARENT_ORDER_ID"(+))
filter("ORD"."PARENT_ORDER_ID"(+) IS NOT NULL)
74 - access("ORD"."ORDER_ID"="OPV"."ORDER_ID"(+) AND "OPV"."OP_CODE"(+)='SAPORDNUM')
75 - filter("WRQST_DOC_VERS_OPV3"."OPVALUE"='2' OR "WRQST_DOC_VERS_OPV3"."OPVALUE"='3' OR
"WRQST_DOC_VERS_OPV3"."OPVALUE"='4')
76 - access("from$_subquery$_032"."QCSJ_C000000002400000"="WRQST_DOC_VERS_OPV3"."ORDER_ID" AND
"WRQST_DOC_VERS_OPV3"."OP_CODE"='DOC_VERS')
78 - access("B_STOP"."ORDER_ID"(+)="from$_subquery$_032"."QCSJ_C000000002400000" AND "B_STOP"."OP_CODE"(+)='BITRIX_STOP')
79 - filter("ORD2"."OS_CODE"(+)<>'DOC_STORN' AND "ORD2"."OS_CODE"(+)<>'ZDLVGI_DEL')
80 - access("ORD2"."OT_CODE"(+)='ZDLVGI')
83 - filter("OPV4"."ORDER_ID" IS NOT NULL AND EXISTS (SELECT 0 FROM "ORDERS" "OS" WHERE "OS"."ORDER_ID"=:B1 AND
"OS"."OT_CODE"='ZDLVGR') OR "OPV4"."ORDER_ID" IS NULL AND NOT EXISTS (SELECT 0 FROM "ORDERS" "OS" WHERE
"OS"."ORDER_ID"=:B2 AND "OS"."OT_CODE"='ZDLVGR'))
84 - filter("OPV4"."OP_CODE"='WEBORDNUM')
85 - access("OPV4"."OPVALUE"='40|'||"from$_subquery$_032"."QCSJ_C000000003000024")
86 - filter("OS"."OT_CODE"='ZDLVGR')
87 - access("OS"."ORDER_ID"=:B1)
88 - filter("OS"."OT_CODE"='ZDLVGR')
89 - access("OS"."ORDER_ID"=:B1)
90 - filter( EXISTS (SELECT 0 FROM "ORDERS" "OS" WHERE "OS"."ORDER_ID"=:B1 AND "OS"."OT_CODE"='ZDLVGR') AND
"OPV4"."ORDER_ID" IS NOT NULL OR NOT EXISTS (SELECT 0 FROM "ORDERS" "OS" WHERE "OS"."ORDER_ID"=:B2 AND
"OS"."OT_CODE"='ZDLVGR') AND "OPV4"."ORDER_ID" IS NULL)
91 - filter("OPV4"."OP_CODE"='WEBORDNUM')
92 - access("OPV4"."OPVALUE"='39|'||"from$_subquery$_032"."QCSJ_C000000003000024")
filter(LNNVL("OPV4"."OPVALUE"='40|'||"from$_subquery$_032"."QCSJ_C000000003000024"))
93 - filter("OS"."OT_CODE"='ZDLVGR')
94 - access("OS"."ORDER_ID"=:B1)
95 - filter("OS"."OT_CODE"='ZDLVGR')
96 - access("OS"."ORDER_ID"=:B1)
97 - filter( EXISTS (SELECT 0 FROM "ORDERS" "OS" WHERE "OS"."ORDER_ID"=:B1 AND "OS"."OT_CODE"='ZDLVGR') AND
"OPV4"."ORDER_ID" IS NOT NULL OR NOT EXISTS (SELECT 0 FROM "ORDERS" "OS" WHERE "OS"."ORDER_ID"=:B2 AND
"OS"."OT_CODE"='ZDLVGR') AND "OPV4"."ORDER_ID" IS NULL)
98 - filter("OPV4"."OP_CODE"='WEBORDNUM')
99 - access("from$_subquery$_032"."QCSJ_C000000003000024"="OPV4"."OPVALUE")
filter("OPV4"."OPVALUE" IS NOT NULL AND LNNVL("OPV4"."OPVALUE"='39|'||"from$_subquery$_032"."QCSJ_C000000003000024")
AND LNNVL("OPV4"."OPVALUE"='40|'||"from$_subquery$_032"."QCSJ_C000000003000024"))
100 - filter("OS"."OT_CODE"='ZDLVGR')
101 - access("OS"."ORDER_ID"=:B1)
102 - filter("OS"."OT_CODE"='ZDLVGR')
103 - access("OS"."ORDER_ID"=:B1)
...
Рейтинг: 0 / 0
14.10.2016, 11:07
    #39326878
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите оптимизировать запрос
Rog_A
Код: plsql
1.
2.
    select MAX(opvalue)
  when no_data_found then

Быдлокод неразбирающегося перестраховщика.
Rog_AПадение производительности происходит на вызове функции: get_op_values
По сути ее можно заменить просто вызовомВот и внедри этот подзапрос в запрос.
...
Рейтинг: 0 / 0
14.10.2016, 11:56
    #39326930
Rog_A
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите оптимизировать запрос
Elic, запрос не я писал, мне отдали на доработку...Внедрять подзапрос пробовал - план становится лучше, а вот время реального выполнения вырастает в 4 раза.. почему, я не пойму.
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Помогите оптимизировать запрос / 3 сообщений из 3, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]