2015-11-03 87 views
0

我有两个表:oracle的更新进行比较的Varchar

OrdHead: Order_no, CustOrd 
OrdItem: Item, Order_no, CustOrd 

两个表正在使用Order_No这是字母数字..我需要更新的CustOrd(NUMBER)OrdItem的柱,用在OrdHead相同的CustOrd号码加入表使用Order_no。

这样做的最好方法是什么?我是否将任何索引添加到表中?

目前我用下面的查询来完成它,但是它只花了100,000条记录就花了很多时间。

UPDATE ORDITEM A SET CUSTORD = 
(SELECT CUSTORD FROM ORDHEAD b WHERE b.ORDER_NO = a.ORDER_NO); 
+2

想在你的数据模型,也许是的CustOrd列是多余的? –

回答

0

如果您查询的工作,那么你可以使用一个索引修复性能:

create index idx_ordhead_order_no_custord on orderhead(order_no, custord); 
+0

像往常一样你发送速度较快,但为什么你使用复合索引,而不是'custored_no' –

+0

custord列将成为索引的一部分,它会提高性能 – are

+2

@JuanCarlosOropeza如果两列都被查询,但只有其中一个在索引,那么Oracle - 如果它使用索引 - 还必须在表中查找。但是,如果两列都在索引中,Oracle不需要费心去查看表格。索引通常较小,因此查询速度快于相应的表。 – Boneist