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 查询/更新