默認調度策略(表鎖引擎:MyISAM/MEMORY)
- **寫操作優先於讀操作**。
- 同表寫操作串行,按到達順序排隊。
- 多個讀操作可並發執行。
調節符
| 關鍵字 | 適用語句 | 效果 | 適用引擎 |
LOW_PRIORITY | DELETE、INSERT、LOAD DATA、REPLACE、UPDATE | 降低寫優先級,讓等待的讀優先插隊;若持續有讀到達,寫可能**餓死** | MyISAM、MEMORY |
HIGH_PRIORITY | SELECT、INSERT | 提升讀優先級,插隊到等待寫之前;高優先級 SELECT 也優於普通 SELECT | MyISAM、MEMORY |
DELAYED | INSERT、REPLACE | 客戶端立即返回,服務器排隊批量寫入;表鎖期間不阻塞讀 | MyISAM、MEMORY |
語法範例
INSERT LOW_PRIORITY INTO t VALUES (1);
SELECT HIGH_PRIORITY * FROM t WHERE id=1;
INSERT DELAYED INTO t VALUES (1),(2);
全局默認低優先級寫入
mysqld --low-priority-updates
# 或 my.cnf
[mysqld]
low-priority-updates=1
InnoDB 差異
- InnoDB 採用**行鎖 + MVCC**,讀寫不阻塞,**上述調節符均無效**。
- InnoDB 優先級控制靠事務隔離級別、鎖等待超時、
innodb_thread_concurrency 等參數。
選型建議
- 批量導入數據(不影響線上查詢)→
INSERT DELAYED 或 LOW_PRIORITY。
- 關鍵實時查詢(不可被寫阻塞)→
SELECT HIGH_PRIORITY。
- 新架構優先選 InnoDB,避開表鎖調度複雜度。