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.