Oracle-Update非常慢

时间:2013-10-17 15:04:28

标签: sql database oracle

这是我的更新声明:

Update childtbl C 
    set C.chldFld=Select P.ParentFld 
                  from ParentTbl P 
                  where P.ID=C.ID

更新需要花费数小时和数小时。

父表和子表都有索引。

3 个答案:

答案 0 :(得分:0)

1)检查您是否有未经授权的交易。

2)childtbl中有多少条记录? ParentTbl中有多少个? ParentTbl.ID上有索引吗?

ParentTbl.ID上的索引将帮助您找到加速更新的正确记录。

3)childtbl.chldFld上有索引吗?有多少索引使用chldFld?

在cldFld上使用索引会降低更新速度。

子计划表中的记录太多(百万)将导致更新需要很长时间。

答案 1 :(得分:0)

如果表之间存在外键关系,则可以在已连接的两个表的密钥保留视图上进行更新。

一般模式是:

Update (
  select parent_table.key   parent_key,
         child_table.key    child_key,
         parent_table.value parent_value,
         child_table.value  child_value
  from   parent_table
  join   child_table  on child_table.key = parent_table.key)
set
  child_value = parent_value;

这为优化器提供了更多选择,可以有效地连接两个表(例如,散列连接)。

答案 2 :(得分:0)

首先检查表格上的任何锁定和阻塞。 检查使用的索引以及它们是否写得不好。 希望你能发布结果,以便我们能更好地接受它。