【发布时间】:2011-01-01 21:33:57
【问题描述】:
首先,我知道使用来自table_b 的值更新table_a 的sql 语句的形式为:
甲骨文:
UPDATE table_a
SET (col1, col2) = (SELECT cola, colb
FROM table_b
WHERE table_a.key = table_b.key)
WHERE EXISTS (SELECT *
FROM table_b
WHERE table_a.key = table_b.key)
MySQL:
UPDATE table_a
INNER JOIN table_b ON table_a.key = table_b.key
SET table_a.col1 = table_b.cola,
table_a.col2 = table_b.colb
据我了解,数据库引擎将遍历table_a 中的记录,并使用table_b 中匹配记录的值更新它们。
所以,如果我在 table_a 中有 1000 万条记录,而在 table_b 中只有 10 条记录:
这是否意味着引擎将通过
table_a进行 1000 万次迭代以更新 10 条记录? Oracle/MySQL/etc 是否足够聪明,只能通过table_b进行 10 次迭代?有没有办法强制引擎实际遍历
table_b中的记录而不是table_a来进行更新? sql语句有替代语法吗?
假设 table_a.key 和 table_b.key 已编入索引。
【问题讨论】:
标签: sql mysql performance oracle