这是我的更新声明:
Update childtbl C
set C.chldFld=Select P.ParentFld
from ParentTbl P
where P.ID=C.ID
更新需要几个小时。
父表和子表都有索引。
1)检查您是否有未提交的交易。
2) childtbl 中有多少条记录?ParentTbl 中有多少人?ParentTbl.ID 上是否有索引?
ParentTbl.ID 上的索引将帮助您找到加速更新的正确记录。
3) childtbl.chldFld 上是否有索引?有多少索引使用 chldFld?
在 cldFld 上有索引会减慢更新速度。
子表中的记录太多(百万)会导致更新需要很长时间。
首先检查表上的任何锁定和阻塞。检查使用的索引以及它们是否写得不好。希望您可以发布结果,以便我们可以更好地处理它。
如果您在表之间有外键关系,您可以更新连接的两个表的键保留视图。
一般模式是:
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;
这为优化器提供了更多有效连接两个表的选择(例如散列连接)。