0

我有 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. 我需要索引哪些列
4

3 回答 3

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

于 2012-08-20T14:29:06.147 回答
1

我看到您正在动态计算:

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

这将花费大量时间并且无法创建索引。您是否考虑过实际创建具有该值的列?这将允许您对其进行索引并使其更快。如果 id 是静态的,这似乎很容易获胜。

于 2012-08-20T14:16:30.430 回答
0

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

于 2012-08-20T15:10:55.150 回答