InnoDB 採行級鎖,BDB 採頁級鎖。本文深度解析兩者優缺點、死鎖成因、表鎖優勢場景、版本控制(MVCC)與並發插入機制。
| 引擎 | 鎖類型 | 鎖獲取時機 |
|---|---|---|
| InnoDB | 行級鎖 | 自動、逐行獲取 |
| BDB | 頁級鎖 | 執行 SQL 陳述式時獲取 |
兩者皆可能產生死鎖,因鎖獲取非在事務開始時一次性完成。
GROUP BY/全表掃描場景明顯劣於粗粒度鎖。SELECT 與 INSERT 並發(MyISAM 並發插入)。GROUP BY 無寫入操作。若並發插入不可行,採「暫存表批次合併」:
LOCK TABLES real_table WRITE, insert_table WRITE;
INSERT INTO real_table SELECT * FROM insert_table;
TRUNCATE TABLE insert_table;
UNLOCK TABLES;