天天看點

大批量插入資料如何優化

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;      

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

作者:Atlas

出處:Atlas的部落格 http://www.cnblogs.com/gomysql

您的支援是對部落客最大的鼓勵,感謝您的認真閱讀。本文版權歸作者所有,歡迎轉載,但請保留該聲明。如果您需要技術支援,本人亦提供有償服務。

繼續閱讀