最近項目有個需求,把一張表中的數據根據一定條件增刪改到另外一張表。按理說這是個很簡單的SQL。可是在實際過程中卻出現了超級長時間的執行過程。
后來經過排查發現是大數據量insert into xx select造成。
原因在於當insert into xx select數據量達到10萬級別,同時又有Update和Delete操作表。容易造成鎖表。
經過研究重構了SQL語句問題解決。具體解決方案如下:
1.update 和Delete操作當成一個事務處理
2.Insert into前先刪除索引
3.將需要insert into的數據,拆分成不大於3000條/次去執行。
