使用 Load Data Infile 最佳化 MySQL 資料匯入
將大型資料集匯入 MySQL 表可能是一項耗時的任務。使用“載入資料到文件中...”命令時,平衡速度和資料完整性可能具有挑戰性。這個問題探討了提高此類導入效能的方法,特別是對於帶有鍵的表。
提高導入速度
問題中提到的主要問題是慢鍵導入資料後創建,無需密鑰。若要解決此問題:
-
對 CSV 檔案進行排序: 依照表主鍵的順序排列 CSV 檔案中的資料。這有助於 Innodb 利用其群集主鍵結構來加快載入速度。
-
停用約束: 暫時停用唯一鍵和外鍵檢查以減少載入期間的開銷。使用指令 set unique_checks = 0;並設定foreign_key_checks = 0;。
-
停用二進位日誌記錄:關閉二進位日誌記錄(設定sql_log_bin = 0;)以繞過日誌記錄以提高效能。
-
分割大檔案: 將大 CSV 檔案分成較小的區塊並單獨載入。這可以減少記憶體消耗並加快進程。
加速金鑰建立
載入資料後,重建金鑰可能會是一個漫長的操作。這裡有一些建議:
-
批次插入:在 LOAD DATA INFILE 語句中使用 BULK INSERT 子句一次匯入帶有鍵的資料。
-
自適應雜湊索引:啟用自適應雜湊索引(innodb_adaptive_hash_index=ON) 以加快常用查詢的索引建立速度。
-
並行索引: 如果可能,請使用平行索引 (innodb_parallel_alter=ON) 為索引建立建立多個執行緒(可能)減少所用時間。
終止慢速查詢
要終止終止後繼續執行的慢速查詢,請考慮:
-
重試連線:中斷並重新連線到MySQL 伺服器以優雅地結束查詢。
-
使用查詢 ID: 識別使用 SHOW PROCESSLIST 查看查詢的 ID,並使用 KILL [QUERY_ID] 終止它。
-
重新啟動 MySQL: 作為最後的手段,重新啟動 MySQL 將終止所有正在執行的查詢。但是,它可能會導致服務中斷。
以上是如何使用帶有鍵表的 Load Data Infile 優化 MySQL 資料導入?的詳細內容。更多資訊請關注PHP中文網其他相關文章!