這個參數只對MyISAM引擎表有作用。
DELAY_KEY_WRITE是指在表關閉之前,將對表的update操作指跟新數據到磁盤,而不更新索引到磁盤,把對索引的更改記錄在內存。這樣MyISAM表可以使索引更新更快。在關閉表的時候一起更新索引到磁盤。
使用:create table的時候,指定DELAY_KEY_WRITE。
當表已經存在的時候:ALTER TABLE table_name DELAY_KEY_WRITE= 1
適用范圍:表有update操作,這個參數的優勢會很好的體現出來。因為這個參數能延遲更新索引到表關閉。當我們需要經常跟新一個大表的時候,可以考慮使用這個參數。
說明:表關閉會在什麼時候發生?你可以理解成當Flash table的時候,表將關閉。那麼有2種情況將會發生 flush table:
當cache 滿了一個新的thread試圖打開一個表的時候,那個表沒有在cache;
當cache裡的表數比table_cache多時thread不在使用表;
這個2種情況將會flush table。
當然,你也可以直接設置啟動參數flush_time ,設置每多少時間flush table一次。
注意:當DELAY_KEY_WRITE使用的時候,如果出現重啟或者掉電等情況,會導致在cache的索引update沒來得及更新,所以必須在啟動參數加上 --myisam-recover,這樣在你啟動MySQL的時候會檢查你的表並同步表和索引.或者在重啟服務器之前運行myisamchk。(然而,即使在這種情況下,應通過使用DELAY_KEY_WRITE保證不丟失數據,因為關鍵字信息總是可以從數據行產生)。
要注意的是,但如果你使用該特性,你應用--myisam-recover選項啟動服務器,為所有MyISAM表添加自動檢查。