First, I know that the sql statement to update table_a using values from table_b is in the form of:
Oracle:
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
What I understand is the database engine will go through records in table_a and update them with values from matching records in table_b.
So, if I have 10 millions records in table_a and only 10 records in table_b:
Does that mean that the engine will do 10 millions iterations through
table_ajust to update 10 records? Are Oracle/MySQL/etc smart enough to do only 10 iterations throughtable_b?Is there a way to force the engine to actually iterate through records in
table_binstead oftable_ato do the update? Is there an alternative syntax for the sql statement?
Assume that table_a.key and table_b.key are indexed.