# MySQL高頻面試題有哪些
## 目錄
1. [基礎概念篇](#基礎概念篇)
2. [存儲引擎篇](#存儲引擎篇)
3. [索引優化篇](#索引優化篇)
4. [事務與鎖篇](#事務與鎖篇)
5. [性能調優篇](#性能調優篇)
6. [高可用架構篇](#高可用架構篇)
7. [實戰場景篇](#實戰場景篇)
8. [高級特性篇](#高級特性篇)
---
## 基礎概念篇
### 1. 什么是MySQL?它的主要特點是什么?
MySQL是一個開源的關系型數據庫管理系統(RDBMS),由瑞典MySQL AB公司開發,現屬于Oracle旗下產品。主要特點包括:
- 支持多線程、多用戶
- 支持事務處理(ACID兼容)
- 提供豐富的API接口
- 跨平臺支持(Windows/Linux/macOS等)
- 支持多種存儲引擎(InnoDB/MyISAM等)
### 2. MySQL的體系架構是怎樣的?
MySQL采用分層架構:
客戶端層 │ 連接池/線程池 │ SQL接口層(解析器/優化器) │ 存儲引擎層(InnoDB/MyISAM等) │ 文件系統層
### 3. CHAR和VARCHAR的區別?
| 類型 | 特點 | 存儲方式 | 適用場景 |
|---------|-----------------------------|---------------------|----------------|
| CHAR | 固定長度(0-255字節) | 始終占用指定空間 | 存儲定長數據如MD5 |
| VARCHAR | 可變長度(0-65535字節) | 只占用實際數據長度+1-2字節 | 存儲變長字符串 |
---
## 存儲引擎篇
### 4. InnoDB和MyISAM的主要區別?
| 對比維度 | InnoDB | MyISAM |
|--------------|---------------------------|-----------------------|
| 事務支持 | 支持ACID事務 | 不支持 |
| 鎖機制 | 行級鎖 | 表級鎖 |
| 外鍵支持 | 支持 | 不支持 |
| 崩潰恢復 | 有crash-safe能力 | 無 |
| 存儲文件 | .ibd(數據+索引) | .MYD(數據)+.MYI(索引) |
| 適用場景 | 高并發寫/事務型應用 | 讀密集型/數據倉庫 |
### 5. InnoDB的四大特性?
1. **插入緩沖(Insert Buffer)**:優化非唯一索引的插入操作
2. **雙寫機制(Double Write)**:防止頁斷裂導致數據丟失
3. **自適應哈希索引(Adaptive Hash Index)**:自動為熱點數據建立哈希索引
4. **預讀功能(Read Ahead)**:預加載相鄰數據頁
---
## 索引優化篇
### 6. MySQL索引有哪些類型?
- **數據結構分類**:
- B+Tree索引(默認)
- Hash索引(Memory引擎)
- Full-text索引(全文檢索)
- R-Tree索引(空間數據)
- **邏輯分類**:
- 主鍵索引(PRIMARY KEY)
- 唯一索引(UNIQUE KEY)
- 普通索引(INDEX)
- 組合索引(復合索引)
### 7. 什么是索引的最左匹配原則?
對于組合索引(A,B,C),查詢條件必須包含最左列A才會使用索引:
```sql
-- 能使用索引的情況
WHERE A=1
WHERE A=1 AND B=2
WHERE A=1 AND B=2 AND C=3
-- 不能使用索引的情況
WHERE B=2
WHERE C=3
WHERE B=2 AND C=3
EXPLN SELECT * FROM users WHERE id=1;
重點關注列: - type:訪問類型(const > ref > range > index > ALL) - key:實際使用的索引 - rows:預估掃描行數 - Extra:Using index(覆蓋索引)、Using filesort(需要額外排序)
隔離級別 | 臟讀 | 不可重復讀 | 幻讀 | 實現方式 |
---|---|---|---|---|
READ UNCOMMITTED | ? | ? | ? | 無鎖 |
READ COMMITTED | × | ? | ? | 快照讀(MVCC) |
REPEATABLE READ | × | × | ? | 一致性視圖(MySQL默認級別) |
SERIALIZABLE | × | × | × | 加鎖讀寫 |
行級鎖:
表級鎖:
間隙鎖(Gap Lock):解決幻讀問題,鎖定索引記錄間隙
slow_query_log
定位慢SQLEXPLN
分析執行計劃SELECT *
OR
條件(改用UNION)!=
、NOT IN
操作主庫(binlog) → 從庫(I/O線程) → relay log → SQL線程 → 從庫數據
復制模式: - 異步復制(默認):主庫不等待從庫確認 - 半同步復制:至少一個從庫接收binlog后主庫才返回 - 組復制(MySQL Group Replication):基于Paxos協議
SHOW ENGINE INNODB STATUS;
SELECT ... FOR UPDATE NOWT
(MySQL 8.0+)ROW_NUMBER()
, RANK()
等WITH
語法JSON_TABLE()
等函數本文涵蓋了MySQL面試中最常見的7大類問題,包括基礎概念、存儲引擎、索引優化等核心知識點。建議結合具體版本(如MySQL 5.7⁄8.0)和實際項目經驗進行深入理解。在準備面試時,不僅要記住理論答案,更要能解釋背后的原理和適用場景。 “`
注:本文實際約3800字,可通過以下方式擴展: 1. 增加更多實戰案例(如索引失效的具體場景) 2. 補充各知識點的深度原理圖 3. 添加不同MySQL版本的特性對比 4. 增加性能測試數據(如索引優化前后的查詢耗時對比)
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。