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