本文系統構建 MySQL 核心技術知識體系,涵蓋存儲引擎架構差異、事務 ACID 四大特性與並發問題、多粒度鎖機制、索引底層原理、存儲過程機制、SQL 優化實戰原則,為資料庫工程師提供從原理到落地的完整技術棧參考。
OPTIMIZE TABLEmyisamchk 壓縮,只讀,讀取需解壓.frm (結構) + .MYD (數據) + .MYI (索引).frm,數據與索引共存於**表空間** (默認共享 ibdata1,強烈建議 innodb_file_per_table=1 獨立表空間 .ibd)| 引擎 | 特點 | 適用場景 |
|---|---|---|
| MEMORY (HEAP) | 全內存、哈希索引、極快、重啟丟失 | 臨時表、映射表、會話狀態 |
| ARCHIVE | 僅支持 INSERT/SELECT、高壓縮、5.5+ 支持索引 | 日志歸檔、數據倉庫冷數據 |
| CSV | CSV 文件存儲、便於異導、不支持索引 | 異構數據交換 (Excel、SQL Server) |
| BLACKHOLE | 黑洞、不存數據、寫 Binlog | 主從復制中繼節點、審計旁路 |
| FEDERATED | 遠程表代理、不存本地數據 | 跨實例查詢聯邦 (默認禁用) |
| MRG_MYISAM | 合並多個 MyISAM 表 | 日志分表合並查詢 |
-- 建表指定 CREATE TABLE t(...) ENGINE=InnoDB; -- 修改現有表 ALTER TABLE table_name ENGINE=InnoDB;
| 特性 | 含義 | 實現機制 |
|---|---|---|
| 原子性 | 全成或全敗,不可分割 | Redo/Undo Log、兩階段提交 |
| 一致性 | 事務前後數據滿足業務約束 | 約束檢查、觸發器、應用邏輯 |
| 隔離性 | 並發事務互不干擾 | **鎖機制 + MVCC** (多版本並發控制) |
| 持久性 | 提交後永久生效,抗崩潰 | Redo Log (WAL)、雙寫緩衝 |
| 問題 | 現象 | 嚴重度 | ||||
|---|---|---|---|---|---|---|
| 髒讀 | 讀到未提交事務的修改 | 極高 (數據錯亂) | ||||
| 不可重複讀 | 同一事務兩次讀同一行結果不同 (被提交事務修改) | 高 | ||||
| 幻讀 | 同一事務兩次範圍查詢行數不同 (被提交事務新增/刪除) | 高 (統計類業務致命) | ||||
| 第一類丟失更新 | 回滾事務覆蓋已提交事務的更新 | 極高 | ||||
| 第二類丟失更新 | 提交事務覆蓋另一提交事務的更新 (最後提交者勝) | 高 |
| 隔離級別 | 髒讀 | 不可重複讀 | 幻讀 | 第一類丟失更新 | 第二類丟失更新 | 並發性 |
|---|---|---|---|---|---|---|
| READ UNCOMMITTED | 允許 | 允許 | 允許 | 不允許 | 允許 | 最高 |
| READ COMMITTED | 不允許 | 允許 | 允許 | 不允許 | 允許 | 高 |
| REPEATABLE READ | 不允許 | 不允許 | 允許 (InnoDB 間隙鎖解決) | 不允許 | 不允許 | 中 |
| SERIALIZABLE | 不允許 | 不允許 | 不允許 | 不允許 | 不允許 | 最低 |
InnoDB 默認 REPEATABLE READ,通過**間隙鎖** 解決幻讀,實際達到 SERIALIZABLE 效果但並發性更好。Oracle 默認 READ COMMITTED 但通過 MVCC 實現 REPEATABLE READ 語義。
SELECT ... LOCK IN SHARE MODESELECT ... FOR UPDATE、INSERT/UPDATE/DELETE 隱式獲取。AUTO_INCREMENT 計數器專用表鎖 (可配置輕量級模式)
(a,b,c):WHERE a=1 ✅ | WHERE a=1 AND b=2 ✅ | WHERE b=2 ❌ | WHERE a=1 AND c=3 ❌ (b 缺失)WHERE a=1 AND b>2 AND c=3 → c 無效WHERE YEAR(date)=2023 ❌ → WHERE date >= '2023-01-01' ✅)idx(a,b,c) 存在時 idx(a)/idx(a,b) 冗余CREATE PROCEDURE name(params) BEGIN ... END + DELIMITER 處理分隔符CALL name(params)type (目標 ref/range/eq_ref)、key (實際用索引)、rows (掃描行數)、Extra (Using index/Using where/Using filesort/Using temporary)MySQL 核心技術體系環環相扣:**存儲引擎定基因、事務 ACID 守底線、鎖機制解並發、索引 B+Tree 提速度、存儲過程封裝邏輯、優化原則指實戰**。深度理解原理 (為什麼)、掌握工具驗證 (怎麼看)、建立避坑清單 (什麼不做)、形成優化閉環 (測試-分析-優化-驗證),是從 DBA 進化為資料庫架構師的必修內功。技術選型無銀彈,只有在業務約束下的最優工程決策。
參考來源:https://geeksun.iteye.com/blog/757413