首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL 跨表 UPDATE 多種寫法與性能優化

     編輯:MySQL 綜合教學

MySQL 跨表 UPDATE 多種寫法與性能優化

將一張表的字段更新到另一張表,常見三種寫法,性能差異巨大。

場景:根據 city_code 更新 city_name

寫法一:多表連接(推薦)


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`);

高效寫法(JOIN 更新)


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 更新就不用子查詢,避免重複掃描、利用索引關聯,性能提升數量級。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved