資料庫知識體系目錄

完整的資料庫學習筆記索引,涵蓋基礎到進階的所有重要概念。


📚 目錄結構

1. 資料庫基礎概念

  • 1.1 什麼是資料庫
  • 1.2 關聯式資料庫 vs 非關聯式資料庫
  • 1.3 SQL vs NoSQL
  • 1.4 常見資料庫系統(PostgreSQL、MySQL、MongoDB、Redis)
  • 1.5 資料庫的 ACID 特性

2. 交易與並發控制 (Transactions & Concurrency)

2.1 交易基礎

  • 2.1.1 什麼是交易(Transaction)
  • 2.1.2 BEGIN、COMMIT、ROLLBACK
  • 2.1.3 交易的 ACID 特性詳解
    • Atomicity(原子性)
    • Consistency(一致性)
    • Isolation(隔離性)
    • Durability(持久性)

2.2 隔離層級 (Isolation Levels) ⭐

  • 2.2.1 並發問題

    • 髒讀(Dirty Read)
    • 不可重複讀(Non-Repeatable Read)
    • 幻讀(Phantom Read)
    • 寫入偏差(Write Skew)
  • 2.2.2 四個隔離層級

    • Read Uncommitted(讀取未提交)
    • Read Committed(讀取已提交)
    • Repeatable Read(可重複讀)
    • Serializable(可序列化)
  • 2.2.3 各隔離層級的使用場景

    • 銀行系統
    • 電商系統
    • 社交媒體
    • 股票交易
  • 2.2.4 不同資料庫的實作差異

    • PostgreSQL 的 MVCC
    • MySQL InnoDB 的實作
    • 快照隔離(Snapshot Isolation)
  • 2.2.5 實務應用

    • 何時更改隔離層級
    • 生產環境的最佳實踐
    • 混合策略

2.3 鎖機制 (Locking)

  • 2.3.1 悲觀鎖(Pessimistic Locking)

    • SELECT FOR UPDATE
    • 共享鎖(Shared Lock)
    • 排他鎖(Exclusive Lock)
    • 使用場景與範例
  • 2.3.2 樂觀鎖(Optimistic Locking)

    • 版本號機制
    • 時間戳機制
    • CAS(Compare-And-Swap)
    • 衝突處理與重試策略
  • 2.3.3 死鎖(Deadlock)

    • 什麼是死鎖
    • 死鎖的四個必要條件
    • 如何預防死鎖
    • 死鎖偵測與處理
  • 2.3.4 鎖的粒度

    • 表級鎖(Table Lock)
    • 行級鎖(Row Lock)
    • 頁級鎖(Page Lock)

3. 索引 (Indexing) ⭐

3.1 索引基礎

  • 3.1.1 什麼是索引
  • 3.1.2 索引的運作原理
  • 3.1.3 索引的好處與壞處
  • 3.1.4 何時需要索引、何時不需要

3.2 索引類型

  • 3.2.1 B-Tree 索引

    • 資料結構原理
    • 查找過程
    • 適用場景
  • 3.2.2 Hash 索引

    • 原理與限制
    • 適用場景
  • 3.2.3 單欄索引 vs 複合索引

    • 最左前綴原則
    • 複合索引的順序選擇
  • 3.2.4 唯一索引(Unique Index)

  • 3.2.5 部分索引(Partial Index)

  • 3.2.6 全文索引(Full-Text Index)

  • 3.2.7 空間索引(Spatial Index)

3.3 索引優化

  • 3.3.1 使用 EXPLAIN 分析查詢計劃
  • 3.3.2 索引選擇性(Selectivity)
  • 3.3.3 索引覆蓋(Covering Index)
  • 3.3.4 索引合併(Index Merge)
  • 3.3.5 索引失效的情況
  • 3.3.6 索引維護(REINDEX、OPTIMIZE)

3.4 實務案例

  • 3.4.1 電商商品搜尋索引設計
  • 3.4.2 社交媒體貼文索引設計
  • 3.4.3 訂單系統索引設計
  • 3.4.4 索引效能測試與對比

4. 查詢優化 (Query Optimization)

4.1 查詢基礎

  • 4.1.1 SELECT 查詢的執行順序

  • 4.1.2 JOIN 的類型與原理

    • INNER JOIN
    • LEFT/RIGHT JOIN
    • FULL OUTER JOIN
    • CROSS JOIN
  • 4.1.3 子查詢 vs JOIN

  • 4.1.4 聚合函數(COUNT、SUM、AVG、MAX、MIN)

  • 4.1.5 GROUP BY 和 HAVING

4.2 查詢優化技巧

  • 4.2.1 避免 SELECT *
  • 4.2.2 使用 LIMIT 限制結果
  • 4.2.3 避免在 WHERE 中使用函數
  • 4.2.4 使用 EXISTS 代替 IN
  • 4.2.5 分頁查詢優化
  • 4.2.6 避免隱式類型轉換

4.3 執行計劃分析

  • 4.3.1 EXPLAIN 的使用
  • 4.3.2 Seq Scan vs Index Scan
  • 4.3.3 成本估算(Cost Estimation)
  • 4.3.4 實際執行時間分析(EXPLAIN ANALYZE)

5. 資料庫設計 (Database Design)

5.1 正規化(Normalization)

  • 5.1.1 第一正規化(1NF)
  • 5.1.2 第二正規化(2NF)
  • 5.1.3 第三正規化(3NF)
  • 5.1.4 BCNF(Boyce-Codd Normal Form)
  • 5.1.5 何時需要反正規化

5.2 關聯設計

  • 5.2.1 一對一(One-to-One)
  • 5.2.2 一對多(One-to-Many)
  • 5.2.3 多對多(Many-to-Many)
  • 5.2.4 自我關聯(Self-Referencing)

5.3 約束(Constraints)

  • 5.3.1 主鍵(Primary Key)
  • 5.3.2 外鍵(Foreign Key)
  • 5.3.3 唯一約束(Unique)
  • 5.3.4 非空約束(NOT NULL)
  • 5.3.5 檢查約束(CHECK)
  • 5.3.6 預設值(DEFAULT)

5.4 資料類型選擇

  • 5.4.1 整數類型(INT、BIGINT)
  • 5.4.2 浮點數與 DECIMAL
  • 5.4.3 字串類型(VARCHAR、TEXT)
  • 5.4.4 日期時間類型
  • 5.4.5 布林類型
  • 5.4.6 JSON 類型

6. 高並發場景處理 ⭐

6.1 閃購/秒殺系統

  • 6.1.1 閃購的挑戰

    • 高並發讀寫
    • 超賣問題
    • 系統崩潰風險
  • 6.1.2 解決方案

    • Redis 預扣庫存
    • 消息隊列削峰
    • 分層驗證
    • 限流與熔斷
  • 6.1.3 完整架構設計

    • CDN 靜態資源
    • Redis 快取層
    • 消息隊列
    • 資料庫層
    • 異步處理
  • 6.1.4 實戰案例分析

6.2 庫存系統設計

  • 6.2.1 庫存扣減策略
  • 6.2.2 預留庫存機制
  • 6.2.3 庫存回補
  • 6.2.4 分散式庫存

6.3 訂單系統設計

  • 6.3.1 訂單狀態機
  • 6.3.2 訂單超時處理
  • 6.3.3 訂單取消與退款
  • 6.3.4 分散式交易

7. 效能調校 (Performance Tuning)

7.1 資料庫層級優化

  • 7.1.1 連接池設置
  • 7.1.2 緩衝區配置
  • 7.1.3 查詢快取
  • 7.1.4 慢查詢日誌分析
  • 7.1.5 資料庫參數調整

7.2 應用層級優化

  • 7.2.1 連接管理
  • 7.2.2 批次操作
  • 7.2.3 預處理語句(Prepared Statements)
  • 7.2.4 ORM 效能陷阱
  • 7.2.5 N+1 查詢問題

7.3 快取策略

  • 7.3.1 快取更新策略

    • Cache-Aside
    • Read-Through
    • Write-Through
    • Write-Behind
  • 7.3.2 快取一致性問題

  • 7.3.3 快取穿透、擊穿、雪崩

  • 7.3.4 Redis 快取實戰

8. 資料庫擴展 (Scaling)

8.1 垂直擴展(Scale Up)

  • 8.1.1 硬體升級
  • 8.1.2 限制與成本

8.2 水平擴展(Scale Out)

  • 8.2.1 讀寫分離

    • 主從複製(Master-Slave)
    • 複製延遲問題
    • 讀寫分離策略
  • 8.2.2 分庫分表(Sharding)

    • 垂直分庫
    • 水平分表
    • 分片鍵選擇
    • 跨分片查詢
    • 分散式 ID 生成
  • 8.2.3 分散式資料庫

    • CAP 定理
    • BASE 理論
    • 最終一致性

9. 備份與恢復 (Backup & Recovery)

9.1 備份策略

  • 9.1.1 完整備份(Full Backup)
  • 9.1.2 增量備份(Incremental Backup)
  • 9.1.3 差異備份(Differential Backup)
  • 9.1.4 邏輯備份 vs 物理備份
  • 9.1.5 備份頻率與保留策略

9.2 災難恢復

  • 9.2.1 Point-in-Time Recovery(PITR)
  • 9.2.2 高可用性架構
  • 9.2.3 故障轉移(Failover)
  • 9.2.4 資料中心容災

10. 安全性 (Security)

10.1 訪問控制

  • 10.1.1 用戶與角色管理
  • 10.1.2 權限管理(GRANT、REVOKE)
  • 10.1.3 最小權限原則

10.2 SQL 注入防護

  • 10.2.1 什麼是 SQL 注入
  • 10.2.2 參數化查詢
  • 10.2.3 ORM 的安全使用
  • 10.2.4 輸入驗證

10.3 資料加密

  • 10.3.1 傳輸加密(SSL/TLS)
  • 10.3.2 靜態資料加密
  • 10.3.3 敏感資料處理

11. NoSQL 資料庫

11.1 Redis

  • 11.1.1 資料結構(String、Hash、List、Set、ZSet)
  • 11.1.2 持久化(RDB、AOF)
  • 11.1.3 快取應用
  • 11.1.4 分散式鎖
  • 11.1.5 發布訂閱

11.2 MongoDB

  • 11.2.1 文件導向資料庫
  • 11.2.2 查詢語言
  • 11.2.3 索引策略
  • 11.2.4 聚合框架
  • 11.2.5 複製與分片

11.3 Elasticsearch

  • 11.3.1 全文搜尋
  • 11.3.2 倒排索引
  • 11.3.3 分詞與分析
  • 11.3.4 聚合查詢

12. 實戰專案案例

12.1 電商系統

  • 12.1.1 商品系統資料庫設計
  • 12.1.2 訂單系統資料庫設計
  • 12.1.3 用戶系統資料庫設計
  • 12.1.4 庫存系統資料庫設計
  • 12.1.5 支付系統資料庫設計

12.2 社交媒體

  • 12.2.1 用戶關係設計
  • 12.2.2 動態消息流設計
  • 12.2.3 評論系統設計
  • 12.2.4 通知系統設計

12.3 內容管理系統

  • 12.3.1 文章管理
  • 12.3.2 分類與標籤
  • 12.3.3 版本控制
  • 12.3.4 權限系統

12.4 金融系統

  • 12.4.1 帳戶系統
  • 12.4.2 交易記錄
  • 12.4.3 對帳系統
  • 12.4.4 風控系統

13. 監控與維運 (Monitoring & Operations)

13.1 效能監控

  • 13.1.1 QPS/TPS 監控
  • 13.1.2 慢查詢監控
  • 13.1.3 連接數監控
  • 13.1.4 鎖等待監控
  • 13.1.5 磁碟 I/O 監控

13.2 日誌管理

  • 13.2.1 錯誤日誌
  • 13.2.2 慢查詢日誌
  • 13.2.3 二進制日誌
  • 13.2.4 審計日誌

13.3 告警系統

  • 13.3.1 告警指標設置
  • 13.3.2 告警通知
  • 13.3.3 故障處理流程

14. 進階主題

14.1 MVCC 原理深入

  • 14.1.1 多版本並發控制機制
  • 14.1.2 PostgreSQL 的實作
  • 14.1.3 MySQL 的實作
  • 14.1.4 版本鏈與可見性判斷

14.2 查詢優化器

  • 14.2.1 基於成本的優化(CBO)
  • 14.2.2 基於規則的優化(RBO)
  • 14.2.3 統計資訊收集
  • 14.2.4 執行計劃選擇

14.3 儲存引擎

  • 14.3.1 InnoDB 引擎
  • 14.3.2 MyISAM 引擎
  • 14.3.3 記憶體引擎
  • 14.3.4 列式儲存

14.4 分散式系統

  • 14.4.1 分散式交易

    • 兩階段提交(2PC)
    • 三階段提交(3PC)
    • TCC(Try-Confirm-Cancel)
    • Saga 模式
  • 14.4.2 分散式鎖

  • 14.4.3 分散式 ID

  • 14.4.4 分散式一致性


📝 學習建議

優先級順序

🔥 必須掌握(核心概念)

  1. 交易與隔離層級(第 2 章)
  2. 索引原理與應用(第 3 章)
  3. 鎖機制(悲觀鎖、樂觀鎖)
  4. 查詢優化基礎(第 4 章)
  5. 資料庫設計基礎(第 5 章)

⭐ 重要掌握(進階應用)

  1. 高並發場景處理(第 6 章)
  2. 效能調校(第 7 章)
  3. 資料庫擴展(第 8 章)
  4. NoSQL 基礎(第 11 章)

💡 建議了解(深入研究)

  1. MVCC 原理(第 14.1)
  2. 分散式系統(第 14.4)
  3. 監控與維運(第 13 章)

學習路徑

第一階段(1-2 週):基礎打底
→ 第 1 章:資料庫基礎概念
→ 第 2 章:交易與隔離層級
→ 第 3 章:索引基礎

第二階段(2-3 週):進階應用
→ 第 4 章:查詢優化
→ 第 5 章:資料庫設計
→ 第 6 章:高並發處理

第三階段(2-3 週):實戰演練
→ 第 7 章:效能調校
→ 第 12 章:實戰案例
→ 實際專案應用

第四階段(持續學習):深入研究
→ 第 8 章:資料庫擴展
→ 第 14 章:進階主題
→ 閱讀資料庫原始碼

🔖 快速參考

常用指令速查

  • PostgreSQL 常用指令
  • MySQL 常用指令
  • Redis 常用指令
  • MongoDB 常用指令

最佳實踐清單

  • 索引設計檢查清單
  • 查詢優化檢查清單
  • 資料庫安全檢查清單
  • 效能調校檢查清單

面試重點

  • 高頻面試題整理
  • 系統設計題目
  • 實戰場景題

📚 推薦資源

書籍

  • 《高性能 MySQL》
  • 《PostgreSQL 修煉之道》
  • 《數據密集型應用系統設計》(DDIA)
  • 《Redis 設計與實現》

線上資源

  • PostgreSQL 官方文件
  • MySQL 官方文件
  • Redis 官方文件
  • Use The Index, Luke(索引教學網站)

實作練習

  • LeetCode Database 題目
  • SQL Zoo
  • PostgreSQL Exercises
  • 自己的專案實作

✅ 學習追蹤

使用 - [ ] 標記每個主題的學習狀態:

  • - [ ] 未開始
  • - [~] 學習中
  • - [x] 已完成
  • - [!] 需要複習

建議為每個主題建立獨立的筆記檔案,並在此目錄中連結。


最後更新: 2025-10-31 版本: v1.0

0%