首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL 延遲索引寫入:DELAY_KEY_WRITE 參數詳解與適用場景

     編輯:MySQL 綜合教學

MySQL 延遲索引寫入:DELAY_KEY_WRITE 參數詳解與適用場景

什麼是 DELAY_KEY_WRITE

建表時指定 DELAY_KEY_WRITE=1 的 MyISAM 表,查詢結束後不立即將索引變更刷盤,而是暫存在記憶體鍵緩衝區(Key Buffer)。只有在緩衝區清理或表關閉時,才將索引塊批量寫入磁碟。對於頻繁更新、高併發讀寫的 MyISAM 表,能大幅提升處理效能。

風險與防護

  • 伺服器崩潰或斷電會導致索引損壞,需修復。
  • 啟動參數加 --myisam-recover 可自動檢查修復所有 MyISAM 表。
  • 或重啟前手動執行 myisamchk 修復。

全域與單表配置

  • 全域:SET GLOBAL delay_key_write = ON; 或 my.cnf 設 delay_key_write = ON。
  • 單表:CREATE TABLE t (...) ENGINE=MyISAM DELAY_KEY_WRITE=1; 或 ALTER TABLE t DELAY_KEY_WRITE=1;。

核心參數說明

DELAY_KEY_WRITE:表關閉前,UPDATE 僅刷新數據到磁碟,索引變更留在記憶體,關閉表時一次性刷盤。能顯著加速 MyISAM 索引更新。

使用建議

  1. 建表時指定 DELAY_KEY_WRITE=1。
  2. 既有表用 ALTER TABLE table_name DELAY_KEY_WRITE=1;。

適用場景

頻繁 UPDATE 的大型 MyISAM 表。參數能延遲索引刷盤至表關閉,顯著降低寫入延遲。

小提示:啟用後務必配置 --myisam-recover 啟動參數,確保崩潰後自動修復索引一致性。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved