大量數據導入時,批量操作可避免每條記錄都刷新索引、提交事務,大幅降低 CPU 與 I/O 開銷。
LOAD DATA INFILE比 INSERT 快 20 倍以上。服務器直接從本地磁碟讀取文件,省去網絡傳輸與解析開銷。
LOAD DATA LOCAL INFILELOCAL 關鍵字導致客戶端讀取文件並經網絡發送給服務器,效率顯著降低。
INSERT 合併INSERT INTO t (a,b) VALUES (1,2), (3,4), (5,6)...;
單條語句插入數百/數千行,減少客戶端往返與 SQL 解析。
START TRANSACTION; INSERT INTO t VALUES (...); INSERT INTO t VALUES (...); ... COMMIT;
非事務表可用 LOCK TABLES t WRITE ... UNLOCK TABLES 達到類似效果。
客戶端連接參數添加 --compress 或 MYSQL_CLIENT_COMPRESS,減少網絡傳輸量。注意:會增加 CPU 開銷,適用於帶寬受限、數據量大的場景。
INSERT 語句中省略有默認值的列,減少網絡包體積與解析時間。
-- 方法一:ALTER TABLE ALTER TABLE t DISABLE KEYS; -- 大量導入數據 ALTER TABLE t ENABLE KEYS; -- 方法二:myisamchk 工具 myisamchk --keys-used=0 -rq /path/to/t.MYI # 禁用索引 # 導入數據 myisamchk --recover --quick /path/to/t.MYI # 重建索引
SET FOREIGN_KEY_CHECKS=0)。ANALYZE TABLE 更新統計信息。