資料庫管理員常需優化單一查詢速度。MySQL 允許調整語句調度優先權,使多客戶端查詢更好協作,避免單一客戶端因鎖定長時間等待。本文解析預設調度策略、優先權調節符、延遲插入、並發插入與儲存引擎鎖定層級對並發影響。
SELECT 的客戶端DELETE、INSERT、REPLACE、UPDATE 的客戶端MyISAM 與 MEMORY 引擎透過資料表鎖實現此策略。客戶端存取資料表前必須取得鎖,操作完成釋放。鎖類型取決於讀寫操作:
適用 DELETE、INSERT、LOAD DATA、REPLACE、UPDATE。降低寫入優先權,允許等待期間新到達的讀取者優先執行。理論上可能導致寫入永遠被阻塞(飢餓)。
適用 SELECT、INSERT。允許 SELECT 插隊等待中的寫入操作,也優先於普通 SELECT。
啟動參數 --low-priority-updates 可讓所有支援的語句預設低優先權,單條 INSERT HIGH_PRIORITY 可覆蓋。
適用 INSERT、REPLACE。資料行放入隊列,立即返回狀態讓客戶端繼續。無讀取者時批次寫入,有讀取者則掛起隊列。與 LOW_PRIORITY 關鍵差異:不阻塞客戶端。
代價:無法取得 AUTO_INCREMENT 值、唯一索引重複計數;伺服器異常關機可能丟失隊列資料(kill -TERM 會先寫入)。
SELECT 且不想阻塞 → INSERT DELAYEDLOW_PRIORITYHIGH_PRIORITY