Forum Stats

  • 3,734,274 Users
  • 2,246,935 Discussions
  • 7,857,216 Comments

Discussions

How to update with parallel hint

PAN KEVIN
PAN KEVIN Member Posts: 184 Red Ribbon

I have a big table wanted to update using the following SQL

MERGE /*+ PARALLEL(new_table) */ INTO new_table
     USING new_CATALOG EQ
        ON (    new_table.UT BETWEEN (EQ.TIME_ - (24 * 2 / 24)) AND EQ.TIME_
            AND new_table.GEOC_LONG BETWEEN   EQ.LONGITUDE
                                    - POWER (10, (0.43 * EQ.MAGNITUDE)) / 111
                                AND   EQ.LONGITUDE
                                    + POWER (10, (0.43 * EQ.MAGNITUDE)) / 111
            AND new_table.GEOC_LAT BETWEEN   EQ.LATITUDE
                                   - POWER (10, (0.43 * EQ.MAGNITUDE)) / 111
                               AND   EQ.LATITUDE
                                   + POWER (10, (0.43 * EQ.MAGNITUDE)) / 111
            AND new_table.KP <= 3)
WHEN MATCHED
THEN
    UPDATE SET new_table.EQ_MARK = 1, new_table.EQ_NUM = EQ.EQ_NUM;

The explain plan is

 Plan Hash Value  : 858869621 


--------------------------------------------------------------------------------------------------------------------------------
| Id  | Operation                | Name                                              | Rows    | Bytes     | Cost   | Time     |
--------------------------------------------------------------------------------------------------------------------------------
|   0 | MERGE STATEMENT          |                                                   |    3738 |    388752 | 302490 | 00:00:12 |
|   1 |   MERGE                  | new_table       |         |           |        |          |
|   2 |    VIEW                  |                                                   |         |           |        |          |
|   3 |     MERGE JOIN           |                                                   |    3738 |   1147566 | 302490 | 00:00:12 |
|   4 |      SORT JOIN           |                                                   |    2991 |    553335 |     26 | 00:00:01 |
|   5 |       TABLE ACCESS FULL  | new_CATALOG |    2991 |    553335 |     25 | 00:00:01 |
| * 6 |      FILTER              |                                                   |         |           |        |          |
| * 7 |       SORT JOIN          |                                                   | 7751900 | 945731800 | 296895 | 00:00:12 |
| * 8 |        TABLE ACCESS FULL | new_table       | 7751900 | 945731800 |  84187 | 00:00:04 |
--------------------------------------------------------------------------------------------------------------------------------


Predicate Information (identified by operation id):
------------------------------------------
* 6 - filter("new_table"."UT"<="EQ"."TIME_" AND "new_table"."GEOC_LONG">="EQ"."LONGITUDE"-POWER(10,0.43*"EQ"."MAGNITUDE")/111 AND
  "new_table"."GEOC_LONG"<="EQ"."LONGITUDE"+POWER(10,0.43*"EQ"."MAGNITUDE")/111 AND
  "new_table"."GEOC_LAT">="EQ"."LATITUDE"-POWER(10,0.43*"EQ"."MAGNITUDE")/111 AND
  "new_table"."GEOC_LAT"<="EQ"."LATITUDE"+POWER(10,0.43*"EQ"."MAGNITUDE")/111)
* 7 - access("new_table"."UT">=INTERNAL_FUNCTION("EQ"."TIME_")-2)
* 7 - filter("new_table"."UT">=INTERNAL_FUNCTION("EQ"."TIME_")-2)
* 8 - filter("new_table"."KP"<=3)

My question is how to speed up the update of data in the table? Or using an update statement?

Thanks very much.

Tagged:
Sign In or Register to comment.