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

MySQL 大量數據高效加載實戰:LOAD DATA、批次 INSERT、鎖表與索引延遲

     編輯:MySQL 資料庫相關知識

核心原則

批量加載比單條插入快數量級,因避免每條記錄刷新索引。

七大加速技巧

  1. 優先用 LOAD DATA:比 INSERT 快;LOAD DATA(服務端直讀)比 LOAD DATA LOCAL(客戶端讀後經網絡傳輸)更快。
  2. 必須用 INSERT 時合併多行:INSERT INTO t VALUES (...),(...),(...);
  3. 多條 INSERT 包裹在事務中:
    BEGIN;
    INSERT INTO t VALUES (...);
    INSERT INTO t VALUES (...);
    COMMIT;
  4. 不支援事務的表用鎖表:
    LOCK TABLES t WRITE;
    INSERT INTO t ...;
    UNLOCK TABLES;
  5. 啟用客戶端/服務端壓縮協議:減少網絡傳輸,但消耗 CPU,小心使用。
  6. 盡量讓 MySQL 填充默認值:減少網絡傳輸與解析開銷。
  7. MyISAM 大量導入:先建無索引表 → 導入 → 建索引(InnoDB/BDB 不適用)。

索引禁用/啟用兩種方式

方式一:ALTER TABLE

ALTER TABLE t DISABLE KEYS;
-- 大量導入
ALTER TABLE t ENABLE KEYS;

方式二:myisamchk 工具

# 禁用所有索引
myisamchk --keys-used=0 t
# 啟用(n 為位掩碼,如 3 個索引 n=7)
myisamchk --recover --quick --keys-used=n t
# 確認索引編號
myisamchk --description t

適用場景總結

場景推薦方案
初始化大表MyISAM: DISABLE KEYS + LOAD DATA
日常增量導入批次 INSERT + 事務
非事務引擎LOCK TABLES + 批次 INSERT
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved