1

以下查询存在很大的性能问题。并且需要帮助以使其尽可能快。

VIEW_SHIPMENT_ORDER_RELEASE有 200 万行,我相信我可以做出更好的查询来加快速度。该应用程序需要将近 2 分钟才能运行。

SELECT O.ORDER_RELEASE_GID
  FROM ORDER_RELEASE O, ORDER_RELEASE_STATUS S
  WHERE O.ORDER_RELEASE_GID = S.ORDER_RELEASE_GID
   AND S.STATUS_TYPE_GID = 'STATUS'
   AND S.STATUS_VALUE_GID IN ('OPEN', 'OPEN-HANDLE')
   AND O.SOURCE_LOCATION_GID = '114'
   AND O.ORDER_RELEASE_GID NOT IN
    (SELECT V.ORDER_RELEASE_GID FROM VIEW_SHIPMENT_ORDER_RELEASE V
     WHERE V.ORDER_RELEASE_GID = O.ORDER_RELEASE_GID)

这是视图代码:

create or replace view glogowner.view_shipment_order_release as
select distinct shp.perspective, shp.shipment_gid, ssul.order_release_gid
from  shipment shp,
    shipment_s_equipment_join ssej,
    s_equipment_s_ship_unit_join sessuj,
    s_ship_unit_line ssul
where   shp.shipment_gid = ssej.shipment_gid
and     ssej.s_equipment_gid = sessuj.s_equipment_gid
and     sessuj.s_ship_unit_gid = ssul.s_ship_unit_gid
and     ssul.order_release_gid is not null

解释计划:

1   Plan hash value: 1257125198
2    
3   --------------------------------------------------------------------------------------------------------------------------------------
4   | Id  | Operation                          | Name                           | Rows  | Bytes |TempSpc| Cost (%CPU)| Time     | Inst   |
5   --------------------------------------------------------------------------------------------------------------------------------------
6   |   0 | SELECT STATEMENT REMOTE            |                                |   314 | 98596 |       | 35795   (1)| 00:07:10 |        |
7   |   1 |  NESTED LOOPS                      |                                |       |       |       |            |          |        |
8   |   2 |   NESTED LOOPS                     |                                |   314 | 98596 |       | 35795   (1)| 00:07:10 |        |
9   |*  3 |    HASH JOIN ANTI                  |                                |   201 | 48441 |       | 35192   (1)| 00:07:03 |        |
10  |   4 |     TABLE ACCESS BY INDEX ROWID    | ORDER_RELEASE                  | 20104 |   726K|       |  3893   (1)| 00:00:47 | ABC123 |
11  |*  5 |      INDEX RANGE SCAN              | OR_SOURCE_LOCATION_GID         | 20104 |       |       |   157   (0)| 00:00:02 | ABC123 |
12  |   6 |     VIEW                           | VW_SQ_1                        |  1515K|   294M|       | 31293   (1)| 00:06:16 | ABC123 |
13  |*  7 |      HASH JOIN                     |                                |  1515K|   144M|       | 31293   (1)| 00:06:16 |        |
14  |   8 |       INDEX STORAGE FAST FULL SCAN | IND_SSEJ_SEQUIPGID             | 69218 |   811K|       |    91   (0)| 00:00:02 | ABC123 |
15  |*  9 |       HASH JOIN                    |                                |  1515K|   127M|    73M| 31195   (1)| 00:06:15 |        |
16  |  10 |        INDEX STORAGE FAST FULL SCAN| PK_S_EQUIPMENT_S_SHIP_UNIT_JOI |  1515K|    56M|       |  3958   (1)| 00:00:48 | ABC123 |
17  |* 11 |        TABLE ACCESS STORAGE FULL   | S_SHIP_UNIT_LINE               |  1619K|    75M|       | 18893   (1)| 00:03:47 | ABC123 |
18  |* 12 |    INDEX UNIQUE SCAN               | PK_ORDER_RELEASE_STATUS        |     1 |       |       |     2   (0)| 00:00:01 | ABC123 |
19  |* 13 |   TABLE ACCESS BY INDEX ROWID      | ORDER_RELEASE_STATUS           |     2 |   146 |       |     3   (0)| 00:00:01 | ABC123 |
20  --------------------------------------------------------------------------------------------------------------------------------------
21   
22  Predicate Information (identified by operation id):
23  ---------------------------------------------------
24   
25     3 - access("A2"."ORDER_RELEASE_GID"="ORDER_RELEASE_GID")
26     5 - access("A2"."SOURCE_LOCATION_GID"='114')
27     7 - access("SSEJ"."S_EQUIPMENT_GID"="SESSUJ"."S_EQUIPMENT_GID")
28     9 - access("SESSUJ"."S_SHIP_UNIT_GID"="SSUL"."S_SHIP_UNIT_GID")
29    11 - storage("SSUL"."ORDER_RELEASE_GID" IS NOT NULL)
30         filter("SSUL"."ORDER_RELEASE_GID" IS NOT NULL)
31    12 - access("A2"."ORDER_RELEASE_GID"="A1"."ORDER_RELEASE_GID" AND "A1"."STATUS_TYPE_GID"='STATUS')
32    13 - filter("A1"."STATUS_VALUE_GID"='OPEN' OR "A1"."STATUS_VALUE_GID"='OPEN-HANDLE')
4

1 回答 1

1

我会确保将以下内容编入索引:

shipment.shipment_gid
shipment_s_equipment_join.s_equipment_gid
s_equipment_s_ship_unit_join.s_ship_unit_gid
s_ship_unit_line.order_release_gid

NOT IN 作为 NOT EXISTS 可能会更好。

于 2013-08-16T15:21:56.980 回答