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

MySQL 插入優化五大妙招:LOAD DATA、批量 VALUES、並行插入、INSERT DELAYED、鎖表批量

     編輯:MySQL 資料庫相關知識

1. LOAD DATA INFILE(最快,快 20 倍)

從文本文件批量導入,繞過 SQL 解析層,直接寫入存儲引擎。

2. 多值 INSERT(單語句插入多行)

INSERT INTO t (a,b) VALUES (1,2), (3,4), (5,6);

比單行 INSERT 快數倍。調大 bulk_insert_buffer_size 可進一步提升對含索引表的批量插入速度。

3. MyISAM 並行插入

  • 系統變量 concurrent_insert:0=禁用,1=預設(表尾無洞時並行),2=總是允許表尾並行(即使中間有刪除產生的洞)。
  • 前提:表無 DELETE 產生的空洞(或設為 2),且為 MyISAM 引擎。

4. INSERT DELAYED(非阻塞、合併寫入)

  • 客戶端無需等待插入完成,服務器立即返回,行入隊列等待寫入。
  • 適合「長時間 SELECT/UPDATE 並發」場景,多客戶端插入會被合併為同一塊寫入,大幅減少 I/O。
  • 僅支援 MyISAM、MEMORY、ARCHIVE 引擎。

5. 批量插入前鎖表(非事務表)

LOCK TABLES t WRITE;
INSERT INTO t ...;  -- 多條 INSERT
INSERT INTO t ...;
UNLOCK TABLES;
  • 索引緩衝區僅在 UNLOCK TABLES 時刷盤一次,避免每條 INSERT 都刷盤。
  • 若能合併為單條 INSERT ... VALUES (),(),() 則無需顯式鎖表。

事務表建議

InnoDB 等事務引擎請用 START TRANSACTION / COMMIT 替代 LOCK TABLES。

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