首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

五大細節提升MySQL數據插入效率:批量INSERT、LOAD DATA、延遲插入、鎖表、預排序

     編輯:MySQL 資料庫相關知識

細節一:單條INSERT插多行(批量VALUES)

INSERT INTO purchase_order_lines (po_id, material_id, qty)
VALUES (1001, 10, 5), (1001, 20, 3), (1001, 30, 8), ...;  -- 一條語句百行

比循環單條INSERT**快數倍**,行數越多優勢越大。ORM層面bulk_create、executemany同理。

細節二:大批量導入用 LOAD DATA INFILE

  • LOAD DATA INFILE 'data.txt' INTO TABLE t FIELDS TERMINATED BY '\t';
  • 速度**比INSERT快10-20倍**
  • 適用:初始化導入萬行級基礎數據、ETL落地
  • 文件需固定格式(Tab/逗號分隔、\N表NULL)

細節三:非即時插入啟用 INSERT DELAYED

INSERT DELAYED INTO safety_stock_log (material_id, diff_qty) VALUES ...;
  • 服務端**立即返回**,不等寫盤
  • 同表多DELAYED合併成**單塊寫入**,減少索引刷盤次數
  • 適用:日誌、審計、非關鍵路徑數據
  • ⚠️ InnoDB不支持(MyISAM/MEMORY專屬),INSERT DELAYED 8.0棄用,改用隊列異步寫入

細節四:大批量插入前鎖表

LOCK TABLES product WRITE;
-- 批量INSERT/LOAD DATA
UNLOCK TABLES;
  • 索引緩衝區**僅在UNLOCK時刷盤一次**
  • 無鎖表時每條INSERT可能觸發刷盤,**IO差異巨大**
  • 僅限**單用戶獨佔表**窗口(如維護窗口、ETL專用表)

細節五:插入前按查詢習慣預排序

採購訂單行按material_id排序後插入 → 後續SELECT * FROM po_lines WHERE po_id=?**無需再排**,直接輸出順序符合業務預期。省去應用層ORDER BY或數據庫filesort。

綜合收益

五大細節**零硬件成本**,純SQL/應用層優化,插入吞吐常提升**10-100倍**。硬件擴容前,先榨乾軟件潛力。

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