mysql批量插入數據優化


一.問題

    很早以前做了一個更新功能,就是將A表中的數據全部查找出來,相對B表中改變的數據更新B表,B表中沒有的數據插入B表。

    最近發現該功能執行速率減慢,有時還跑超時。原來是A表中數據漸漸變多,就有了這個問題。

二.優化知識

   1.循環每條插入改為一條語句插入多條。

     即使用 insert into table () values  (),(),(),()插入,如果字符串太長,可暫時設置 ini_set('memory_limit','1024M');

    這是因為合並后日志量(MySQL的binlog和innodb的事務讓日志)減少了,降低日志刷盤的數據量和頻率,從而提高效率。通過合並SQL語句,同時也能減少SQL語句解析的次數,減少網絡傳輸的IO

   2.在事務中進行插入處理

     使用事務可以提高數據的插入效率,這是因為進行一個INSERT操作時,MySQL內部會建立一個事務,在事務內才進行真正插入處理操作。通過使用事務可以減少創建事務的消耗,所有插入都在執行后才進行提交操作

  3.如果可以數據有序插入

    這是因為由於數據庫插入時,需要維護索引數據,無序的記錄會增大維護索引的成本

  4.分批次插入

 三.解決

   分批次取出數據,每批數據先做處理,有更新的更新,要插入的拼接成一條sql語句,最后一次性插入。每批數據的處理都放在事務中。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM