DELAY_KEY_WRITE 是 MyISAM 引擎專屬參數,能顯著提升大量 UPDATE 場景下的索引更新效能。本文詳細說明其原理、配置方式、適用場景與風險控制。
啟用後,對表的 UPDATE 操作只寫入數據到磁碟,不即時更新索引,索引變更暫存在記憶體,直到表關閉時一次性刷新索引到磁碟。這大幅減少隨機 I/O,加速寫入。
CREATE TABLE t1 (...) DELAY_KEY_WRITE=1;
ALTER TABLE table_name DELAY_KEY_WRITE=1;
頻繁 UPDATE 大表的場景。延遲索引刷新可顯著降低寫入延遲,提升吞吐量。
table_cache 設定,且執行緒不再使用該表。FLUSH TABLES 或設定啟動參數 flush_time 定期刷新。風險:掉電、重啟等異常導致記憶體中索引更新未刷盤,索引損壞。
對策(二選一):
--myisam-recover,啟動時自動檢查修復表與索引同步。myisamchk 檢查修復。關鍵保證:即使索引損壞,數據行完整,索引可從數據重建,不會丟失數據。
若使用此特性,務必啟用 --myisam-recover 為所有 MyISAM 表添加自動檢查,平衡效能與可靠性。