大批量插入數據如何優化

1.對於 MyISAM 類型的表,可以通過以下方式快速的導入大量的數據。


ALTER TABLE tblname DISABLE KEYS;
LOAD DATA LOCAL INFILE '/usr/share/dict/words' INTO TABLE source_words(word);
ALTER TABLE tblname ENABLE KEYS;

這兩個命令用來打開或者關閉 Myisam 表非唯一索引的更新。在導入大量的數據到一個非空的 MyISAM 表時,通過設置這兩個命令,可以提高導入的效率。對於導入大量數據到一個空的 MyISAM 表,默認就是先導入數據然後才創建索引的,所以不用進行設置。


2. 而對於 InnoDB類型的表,這種方式並不能提高導入數據的效率。對於 InnoDB 類型的表,我們有以下幾種方式可以提高導入的效率:

a. 因爲 InnoDB類型的表是按照主鍵的順序保存的,所以將導入的數據按照主鍵的順序排列,可以有效的提高導入數據的效率。如果 InnoDB表沒有主鍵,那麼系統會默認創建一個內部列作爲主鍵,所以如果可以給表創建一個主鍵,將可以利用這個優勢提高導入數據的效率。

b. 在導入數據前執行

SET UNIQUE_CHECKS=0;

關閉唯一性校驗,在導入結束後執行

SET UNIQUE_CHECKS=1;

恢復唯一性校驗,可以提高導入的效率。

c. 如果應用使用自動提交的方式,建議在導入前執行

SET AUTOCOMMIT=0;

關閉自動提交,導入結束後再執行

SET AUTOCOMMIT=1;

打開自動提交,也可以提高導入的效率。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章