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_a
just 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_b
instead oftable_a
to do the update? Is there an alternative syntax for the sql statement?
Assume that table_a.key
and table_b.key
are indexed.