MySQL延遲更新索引(Delayed Key Write):
使用表創建選項DELAY_KEY_WRITE創建的myisam表,在查詢結束後,不會將索引的改變數據寫入磁盤,而是在內存的健緩沖區(In-memory key buffer)中緩存索引改變數據。它只會在清理緩存區,或關閉表時,才將索引塊轉儲到磁盤。對於數據經常改變,並且使用頻繁的表,這種模式大大提高了表的處理性能。
不過,如果在服務器或系統奔潰,索引將肯定損壞,並需要修復。用戶可以使用腳本,如運行myisamchk工具,在重啟服務器前進行修復,也可以使用自動修復(Automatic Recovery)選項進行修復(即使沒有選用DELAY_KEY_WRITE選項,這些修復上的安全措施也是很有價值的)。延遲更新索引特性可以被全局配置,也可以為個別表單獨配置。
MySQL數據庫參數DELAY_KEY_WRITE:
DELAY_KEY_WRITE是指在表關閉之前,將對表的update操作只更新數據到磁盤,而不更新索引到磁盤,把對索引的更改記錄在內存。(這個選項的作用是暫時制止MySQL在該命令每插入一條新記錄和每修改一條現有之後立刻對索引進行刷新,對索引的刷新將等到全部記錄插入/修改完畢之後再進行)
這樣MyISAM表可以使索引更新更快。在關閉表的時候一起更新索引到磁盤。
使用:1:create table的時候,指定DELAY_KEY_WRITE。
2: 當表已經存在的時候:ALTER TABLE table_name DELAY_KEY_WRITE= 1。
場景:表有update操作,duang duang的體現出優勢了。因為這個參數能延遲更新索引到表關閉。經常更新一個大表的時候,可以用這個參數
小提示:當DELAY_KEY_WRITE使用的時候,如果出現重啟或者掉電啥的情況,會導致在cache的索引update沒來得及更新,所以必須在啟動參數加上 --myisam-recover,這樣在你啟動mysql的時候會檢查你的表並同步表和索引.或者在重啟服務器之前運行myisamchk。使用該特性,應用--myisam-recover選項啟動服務器,為所有MyISAM表添加自動檢查。