在表上微调UPDATE查询

时间:2012-08-20 14:11:48

标签: sql oracle sql-update

我有2个表table1和table2都有大量数据,Table1有500万,Table2有80,000个记录。我正在运行更新,

Update Table1 a
Set 
a.id1=(SELECT DISTINCT p.col21 
         FROM Table2 p 
         WHERE p.col21 = SUBSTR(a.id, 2, LENGTH(a.id));

查询中的substr和distinct使它变慢。

  1. 如何重写此查询以加快流程和
  2. 我需要索引哪些列

3 个答案:

答案 0 :(得分:3)

可能是合并

 merge into Table1 a
  using Table2 p 
  on (p.col21 = SUBSTR(a.id, 2, LENGTH(a.id))
  When matched then
     update set a.id1 = p.col21;

和基于函数的索引a.id

答案 1 :(得分:1)

我看到你正在动态计算:

p.col21=SUBSTR(a.id,2,LENGTH(a.id))

这将需要一些大量时间,因此无法创建索引。您是否考虑过实际创建具有该值的列?这将允许您对其进行索引并使其更快。如果id是静态的,这似乎是一个轻松的胜利。

答案 2 :(得分:0)

您的子查询返回多少行,以及您要更新多少行?有了大量的更新,索引可能根本无法帮助您。