UPDATE md_meter set warranty_end_date = DATE_ADD(warranty_begin_date,INTERVAL 10 YEAR) where warranty_end_date = '1900-01-01';
2 處理過程
2.1查看執行計划
![]() |
---|
很明顯走的是索引的全表掃描,再加上數據庫的隔離級別是RR的級別,並且warranty_end_date字段無索引,會造成全表的GAP鎖,為了減少更新階段對其它dml語句造成lock的風險,該數據庫版本是支持online DDL的,特在warranty_end_date字段上
創立一個索引
2.2創建索引
mysql> alter table md_meter add index idx_warranty_end_date;
執行計划可見語句執行效果明顯改善
2.3 執行更新
mysql> UPDATE md_meter set warranty_end_date = DATE_ADD(warranty_begin_date,INTERVAL 10 YEAR) where warranty_end_date = '1900-01-01';
加鎖處理分析 online DDL可參考文檔: