oracle 更新比较 Varchar

Posted

技术标签:

【中文标题】oracle 更新比较 Varchar【英文标题】:oracle Update comparing Varchar 【发布时间】:2015-11-03 16:18:20 【问题描述】:

我有两张桌子:

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

这两个表都是使用 Order_No 连接的,Ord_No 是字母数字。我需要使用 Order_no 在 OrdHead 表中使用相同的 CustOrd 编号更新 OrdItem 的 CustOrd (NUMBER) 列。

最好的方法是什么?我是否向表中添加任何索引?

目前我使用以下查询来执行此操作,但仅处理 100,000 条记录就需要很多时间。

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

【问题讨论】:

想想你的数据模型,也许 CustOrd 列是多余的? 【参考方案1】:

如果您的查询有效,那么您可以使用索引来修复性能:

create index idx_ordhead_order_no_custord on orderhead(order_no, custord);

【讨论】:

像往常一样你发送到fast,但是为什么你使用复合索引而不是ORDER_NO custord 列将成为索引的一部分,它将提高性能 @JuanCarlosOropeza 如果两个列都在被查询,但只有一个列在索引中,那么 Oracle - 如果它使用索引 - 也必须在表中进行查找。但是,如果两列都在索引中,Oracle 就不必费心去表。索引通常比相应的表更小,因此查询速度更快。 @Boneist 这也适用于其他数据库,如 MSSQL 和 Postgres?还是只是一个预言机? 在 MSSSQL 和 Postgre 中相同,但在 MSSQL 中,我会将 custord 列放入索引的包含列中...

以上是关于oracle 更新比较 Varchar的主要内容,如果未能解决你的问题,请参考以下文章

为了比较,在没有 IN 条件的情况下重写 Oracle 查询/更新

在Oracle-sql中比较两张表并更新一张表

Oracle 建立触发器比较两张表相同字段的数据,再更新另一个字段

Oracle批量更新根据一个大表批量更新另一大表的方法比较

oracle数据库插入的速度快还是更新的速度快啊

oracle 插入100万条数据,更新100万条数据