update in 的優化寫法

在一般的 update in 寫法就是:

update table_name set column = 'xxx' where column2 in (select x from table_name2 where xxxxxx)

但是這種寫法在表數據量小的時候不會有啥問題, 但是在表的數據量比較大的情況下, 這樣就會引起全表掃描, 子查詢帶來了巨大的資源開銷,以及鎖表.

優化後的寫法如下:

update table_a a join table_b b on a.xx=b.xx
set a.xx=要變更的值
where b.xx=條件值

實際例子

第一種寫法:

EXPLAIN
UPDATE t_form_template_function SET del_flag = '1' WHERE struct_id IN ( SELECT DISTINCT id FROM t_form_template_struct WHERE pid = 'GE148389280359880457831') and del_flag='0' ;

分析結果爲: rows : 6661

第二種寫法:

EXPLAIN
UPDATE t_form_template_function f JOIN t_form_template_struct s ON f.struct_id = s.id SET f.del_flag = '1' 
WHERE s.pid = 'GE148389280359880457831' AND f.del_flag = '0';

分析結果爲: rows: 6

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章