Oracle 合并需要时间进行更新

Oracle 合并需要时间进行更新,oracle,query-optimization,oracle12c,bulk-operations,Oracle,Query Optimization,Oracle12c,Bulk Operations,我试图使用REF_TAB表更新表TAB1中的一列代码,该表分别有200 mn和30 mn条记录,但更新记录需要3-4小时 TAB1 -- 200000000(200mn) ID VARCHAR2(10) PK on ID T_ID VARCHAR2(10) --- duplicate values X_CD VARCHAR2(2) CODE VARCHAR2(2) -- list partition with 30 codes REF_TAB --30000000(30 mn) T_ID

我试图使用REF_TAB表更新表TAB1中的一列代码,该表分别有200 mn和30 mn条记录,但更新记录需要3-4小时

TAB1  -- 200000000(200mn)
ID VARCHAR2(10)  PK on ID
T_ID VARCHAR2(10) --- duplicate values
X_CD VARCHAR2(2)
CODE VARCHAR2(2) -- list partition with 30 codes

REF_TAB --30000000(30 mn)
T_ID VARCHAR2(10) --- unique values
CODE VARCHAR2(2)
TAB1.ID主键上的唯一索引是唯一索引

我试过合并。是否有其他方法来提高查询的性能或通过任何其他方式

MERGE /*+ parallel(A,4) append */ INTO TAB1 A
USING (SELECT T_ID,CODE FROM REF_TAB) R
ON (    A.T_ID = R.T_ID
        AND A.X_CD IS NOT NULL
    )
WHEN MATCHED THEN
UPDATE
SET A.CODE = R.CODE;

COMMIT;
1添加索引

您可以在表tab1中的T_ID列上添加索引。这将大大加快声明的速度。 或者,如果您将REF_选项卡中的T_ID作为主键,那么它是唯一的,这也会有所帮助

在这两种情况下,您都应该放弃一次完整的表扫描,并将其替换为索引或索引范围扫描,这应该更快

2创建表格解决方案

另一个应该更快的解决方案是创建一个新表tab2:

将表tab2创建为 选择t.ID ,T_ID ,t.X_CD ,r.代码 从表1到表t 使用T\U ID连接参考选项卡 将索引、授权和约束添加到tab2,删除tab1,然后将tab2重命名为tab1。这样,您就不会存储回滚信息,这是进行大规模更新时的主要资源问题

3使用外键+连接,而不是重复数据数据库规范化

您还可以考虑在Tab1:

上添加外键。 更改表tab1 添加约束选项卡1\u fk外键T\u ID 参考参考选项卡T\U ID
然后从tab1中删除“代码”列并读取每个联接的值,这样在值发生更改时就不必更新该值。

调优Oracle或任何数据库查询都需要大量您尚未提供的特定信息,例如索引、数据倾斜、数据库负载等。请阅读说明如何提出此类问题的内容。否则我们只是猜测,你也不可能得到一个有用的答案。ID col上只有一个唯一的索引,我已经提到了每个表的总记录计数,你说T_ID VARCHAR210重复值。那么当A.X_CD不为NULL时,A.T_ID是否不同呢?没有必要,TAB1中可能有多个A.X_CD不为NULL的记录,并且它必须更新所有这些记录。是否可以使用append提示共享exp plan,而不使用append提示?语句必须读取并应用REF_选项卡中的所有行。因此,该表上的索引对性能没有任何好处。我同意应使用主键约束强制唯一性,但这是另一回事。您认为批量更新在这种情况下比合并更有用吗?@APC我不确定这一点。由于合并中没有插入语句,所以只需考虑Tab1中存在的记录ALLADE,这样您就可以通过RefTabl上的索引来读取该记录并读取代码,这意味着Tab1上的全表扫描和在RefItTabl上的索引扫描。不确定优化器是否意识到这一点。@我已经尝试了您的第二种解决方案,创建了与TAB1相同的中间表TEMP,然后使用TEMP LOJ在T_ID上插入REF_TAB,但没有多大帮助。。我们可以考虑批量更新作为替代方案吗。@kashi你可以试试,但我不认为这真的有什么区别,除非你在REF_选项卡上有一个唯一的索引。
with append
Plan hash value: 3594611329

--------------------------------------------------------------------------------------------------------------------------------------------------
| Id  | Operation                 | Name                    | Rows  | Bytes | Cost (%CPU)| Time     | Pstart| Pstop |    TQ  |IN-OUT| PQ Distrib |
--------------------------------------------------------------------------------------------------------------------------------------------------
|   0 | MERGE STATEMENT           |                         |    93M|   714M|   494K  (4)| 00:00:03 |       |       |        |      |            |
|   1 |  MERGE                    | TAB1           |       |       |            |          |       |       |        |      |            |
|   2 |   PX COORDINATOR          |                         |       |       |            |          |       |       |        |      |            |
|   3 |    PX SEND QC (RANDOM)    | :TQ10001                |    93M|    27G|   494K  (4)| 00:00:03 |       |       |  Q1,01 | P->S | QC (RAND)  |
|   4 |     VIEW                  |                         |       |       |            |          |       |       |  Q1,01 | PCWP |            |
|*  5 |      HASH JOIN            |                         |    93M|    27G|   494K  (4)| 00:00:03 |       |       |  Q1,01 | PCWP |            |
|   6 |       PX RECEIVE          |                         |    32M|   374M|  8430   (5)| 00:00:01 |       |       |  Q1,01 | PCWP |            |
|   7 |        PX SEND BROADCAST  | :TQ10000                |    32M|   374M|  8430   (5)| 00:00:01 |       |       |  Q1,00 | S->P | BROADCAST  |
|   8 |         PX SELECTOR       |                         |       |       |            |          |       |       |  Q1,00 | SCWC |            |
|   9 |          TABLE ACCESS FULL| REF_TAB                 |    32M|   374M|  8430   (5)| 00:00:01 |       |       |  Q1,00 | SCWP |            |
|  10 |       PX BLOCK ITERATOR   |                         |    93M|    26G|   484K  (3)| 00:00:03 |     1 |    35 |  Q1,01 | PCWC |            |
|* 11 |        TABLE ACCESS FULL  | TAB1                    |    93M|    26G|   484K  (3)| 00:00:03 |     1 |    35 |  Q1,01 | PCWP |            |
--------------------------------------------------------------------------------------------------------------------------------------------------


  without append

 Plan hash value: 3594611329

--------------------------------------------------------------------------------------------------------------------------------------------------
| Id  | Operation                 | Name                    | Rows  | Bytes | Cost (%CPU)| Time     | Pstart| Pstop |    TQ  |IN-OUT| PQ Distrib |
--------------------------------------------------------------------------------------------------------------------------------------------------
|   0 | MERGE STATEMENT           |                         |   103M|   790M|   494K  (4)| 00:00:03 |       |       |        |      |            |
|   1 |  MERGE                    | TAB1                    |       |       |            |          |       |       |        |      |            |
|   2 |   PX COORDINATOR          |                         |       |       |            |          |       |       |        |      |            |
|   3 |    PX SEND QC (RANDOM)    | :TQ10001                |   103M|    30G|   494K  (4)| 00:00:03 |       |       |  Q1,01 | P->S | QC (RAND)  |
|   4 |     VIEW                  |                         |       |       |            |          |       |       |  Q1,01 | PCWP |            |
|*  5 |      HASH JOIN            |                         |   103M|    30G|   494K  (4)| 00:00:03 |       |       |  Q1,01 | PCWP |            |
|   6 |       PX RECEIVE          |                         |    32M|   374M|  8430   (5)| 00:00:01 |       |       |  Q1,01 | PCWP |            |
|   7 |        PX SEND BROADCAST  | :TQ10000                |    32M|   374M|  8430   (5)| 00:00:01 |       |       |  Q1,00 | S->P | BROADCAST  |
|   8 |         PX SELECTOR       |                         |       |       |            |          |       |       |  Q1,00 | SCWC |            |
|   9 |          TABLE ACCESS FULL| REF_TAB                 |    32M|   374M|  8430   (5)| 00:00:01 |       |       |  Q1,00 | SCWP |            |
|  10 |       PX BLOCK ITERATOR   |                         |   103M|    29G|   485K  (4)| 00:00:03 |     1 |    35 |  Q1,01 | PCWC |            |
|* 11 |        TABLE ACCESS FULL  | TAB1                    |   103M|    29G|   485K  (4)| 00:00:03 |     1 |    35 |  Q1,01 | PCWP |            |
--------------------------------------------------------------------------------------------------------------------------------------------------