將一張表的字段更新到另一張表,常見三種寫法,性能差異巨大。
UPDATE student s, city c
SET s.city_name = c.name
WHERE s.city_code = c.code;
UPDATE a, b
SET a.title = b.title, a.name = b.name
WHERE a.id = b.id;
UPDATE student s
SET city_name = (SELECT name FROM city WHERE code = s.city_code);
將 tk_zyt_scenery_order 的狀態同步到 t_advs_order:
UPDATE t_advs_order
SET attribute1 = (SELECT o.order_state FROM tk_zyt_scenery_order o WHERE o.order_id = `on`),
attribute2 = (SELECT o.order_state FROM tk_zyt_scenery_order o WHERE o.order_id = `on`)
WHERE EXISTS (SELECT 1 FROM tk_zyt_scenery_order o WHERE o.order_id = `on`);
UPDATE t_advs_order a
INNER JOIN tk_zyt_scenery_order s ON s.order_id = a.`on`
SET a.attribute1 = s.order_id, a.attribute2 = s.order_id;
結論: 能用 JOIN 更新就不用子查詢,避免重複掃描、利用索引關聯,性能提升數量級。