0

我有两个表 ORDERS 和 ORDER_TEMP,它们的结构相同。ORDER_ID 是两个表中的主键。

现在,我必须从 ORDER_TEMP 表中的值更新 ORDER 表中的 KEY_ID 列。

这两个表中都有超过百万条记录。

UPDATE ORDER  
SET KEY_ID = ( SELECT KEY_ID FROM ORDER_TEMP WHERE  ORDER_TEMP.ORDER_ID = ORDER.ORDER_ID and ORDER_TEMP.PNP_GROUP=99) 

如果我在 ORDER 表上放置一个 where 子句并为一个订单运行它,它确实可以工作,但是当我为整个表执行此操作时,它会永远运行并且它不起作用。

请帮忙

4

1 回答 1

1

假设您的意图是仅更新ORDER表中匹配ORDER_TEMP且不同的表中的那些行KEY_ID,并忽略无效表名这一事实ORDER,我将首先确保您只更新少于 20表中您希望修改的行的百分比

UPDATE ORDER  
   SET KEY_ID = ( SELECT KEY_ID 
                    FROM ORDER_TEMP 
                   WHERE ORDER_TEMP.ORDER_ID = ORDER.ORDER_ID 
                     and ORDER_TEMP.PNP_GROUP=99) 
 WHERE EXISTS( SELECT 1
                 FROM order_temp
                WHERE ORDER_TEMP.ORDER_ID = ORDER.ORDER_ID 
                  and ORDER_TEMP.PNP_GROUP=99
                  and order_temp.key_id != order.key_id) 

如果KEY_ID可以NULL在任一表中,则需要调整EXISTS子句中的不等式比较。

如果这不能解决问题,我们将需要从当前查询计划和可用索引开始的更多信息。

于 2012-08-15T00:31:32.277 回答