我有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使它变慢。
答案 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)
您的子查询返回多少行,以及您要更新多少行?有了大量的更新,索引可能根本无法帮助您。