推薦序
前言
第1章 MySQL體係結構和存儲引擎 1
1.1 定義數據庫和實例 1
1.2 MySQL體係結構 3
1.3 MySQL存儲引擎 5
1.3.1 InnoDB存儲引擎 6
1.3.2 MyISAM存儲引擎 7
1.3.3 NDB存儲引擎 7
1.3.4 Memory存儲引擎 8
1.3.5 Archive存儲引擎 9
1.3.6 Federated存儲引擎 9
1.3.7 Maria存儲引擎 9
1.3.8 其他存儲引擎 9
1.4 各存儲引擎之間的比較 10
1.5 連接MySQL 13
1.5.1 TCP/IP 13
1.5.2 命名管道和共享內存 15
1.5.3 UNIX域套接字 15
1.6 小結 15
第2章 InnoDB存儲引擎 17
2.1 InnoDB存儲引擎概述 17
2.2 InnoDB存儲引擎的版本 18
2.3 InnoDB體係架構 19
2.3.1 後颱綫程 19
2.3.2 內存 22
2.4 Checkpoint技術 32
2.5 Master Thread工作方式 36
2.5.1 InnoDB 1.0.x版本之前的Master Thread 36
2.5.2 InnoDB1.2.x版本之前的Master Thread 41
2.5.3 InnoDB1.2.x版本的Master Thread 45
2.6 InnoDB關鍵特性 45
2.6.1 插入緩衝 46
2.6.2 兩次寫 53
2.6.3 自適應哈希索引 55
2.6.4 異步IO 57
2.6.5 刷新鄰接頁 58
2.7 啓動、關閉與恢復 58
2.8 小結 61
第3章 文件 62
3.1 參數文件 62
3.1.1 什麼是參數 63
3.1.2 參數類型 64
3.2 日誌文件 65
3.2.1 錯誤日誌 66
3.2.2 慢查詢日誌 67
3.2.3 查詢日誌 72
3.2.4 二進製日誌 73
3.3 套接字文件 83
3.4 pid文件 83
3.5 錶結構定義文件 84
3.6 InnoDB存儲引擎文件 84
3.6.1 錶空間文件 85
3.6.2 重做日誌文件 86
3.7 小結 90
第4章 錶 91
4.1 索引組織錶 91
4.2 InnoDB邏輯存儲結構 93
4.2.1 錶空間 93
4.2.2 段 95
4.2.3 區 95
4.2.4 頁 101
4.2.5 行 101
4.3 InnoDB行記錄格式 102
4.3.1 Compact行記錄格式 103
4.3.2 Redundant行記錄格式 106
4.3.3 行溢齣數據 110
4.3.4 Compressed和Dynamic行記錄格式 117
4.3.5 CHAR的行結構存儲 117
4.4 InnoDB數據頁結構 120
4.4.1 File Header 121
4.4.2 Page Header 122
4.4.3 Infimum和Supremum Records 123
4.4.4 User Records和Free Space 123
4.4.5 Page Directory 124
4.4.6 File Trailer 124
4.4.7 InnoDB數據頁結構示例分析 125
4.5 Named File Formats機製 132
4.6 約束 134
4.6.1 數據完整性 134
4.6.2 約束的創建和查找 135
4.6.3 約束和索引的區彆 137
4.6.4 對錯誤數據的約束 137
4.6.5 ENUM和SET約束 139
4.6.6 觸發器與約束 139
4.6.7 外鍵約束 142
4.7 視圖 144
4.7.1 視圖的作用 144
4.7.2 物化視圖 147
4.8 分區錶 152
4.8.1 分區概述 152
4.8.2 分區類型 155
4.8.3 子分區 168
4.8.4 分區中的NULL值 172
4.8.5 分區和性能 176
4.8.6 在錶和分區間交換數據 180
4.9 小結 182
第5章 索引與算法 183
5.1 InnoDB存儲引擎索引概述 183
5.2 數據結構與算法 184
5.2.1 二分查找法 184
5.2.2 二叉查找樹和平衡二叉樹 185
5.3 B+樹 187
5.3.1 B+樹的插入操作 187
5.3.2 B+樹的刪除操作 190
5.4 B+樹索引 191
5.4.1 聚集索引 192
5.4.2 輔助索引 196
5.4.3 B+樹索引的分裂 200
5.4.4 B+樹索引的管理 202
5.5 Cardinality值 210
5.5.1 什麼是Cardinality 210
5.5.2 InnoDB存儲引擎的Cardinality統計 212
5.6 B+樹索引的使用 215
5.6.1 不同應用中B+樹索引的使用 215
5.6.2 聯閤索引 215
5.6.3 覆蓋索引 218
5.6.4 優化器選擇不使用索引的情況 219
5.6.5 索引提示 221
5.6.6 Multi-Range Read優化 223
5.6.7 Index Condition Pushdown(ICP)優化 226
5.7 哈希算法 227
5.7.1 哈希錶 228
5.7.2 InnoDB存儲引擎中的哈希算法 229
5.7.3 自適應哈希索引 230
5.8 全文檢索 231
5.8.1 概述 231
5.8.2 倒排索引 232
5.8.3 InnoDB全文檢索 233
5.8.4 全文檢索 240
5.9 小結 248
第6章 鎖 249
6.1 什麼是鎖 249
6.2 lock與latch 250
6.3 InnoDB存儲引擎中的鎖 252
6.3.1 鎖的類型 252
6.3.2 一緻性非鎖定讀 258
6.3.3 一緻性鎖定讀 261
6.3.4 自增長與鎖 262
6.3.5 外鍵和鎖 264
6.4 鎖的算法 265
6.4.1 行鎖的3種算法 265
6.4.2 解決Phantom Problem 269
6.5 鎖問題 271
6.5.1 髒讀 271
6.5.2 不可重復讀 273
6.5.3 丟失更新 274
6.6 阻塞 276
6.7 死鎖 278
6.7.1 死鎖的概念 278
6.7.2 死鎖概率 280
6.7.3 死鎖的示例 281
6.8 鎖升級 283
6.9 小結 284
第7章 事務 285
7.1 認識事務 285
7.1.1 概述 285
7.1.2 分類 287
7.2 事務的實現 294
7.2.1 redo 294
7.2.2 undo 305
7.2.3 purge 317
7.2.4 group commit 319
7.3 事務控製語句 323
7.4 隱式提交的SQL語句 328
7.5 對於事務操作的統計 329
7.6 事務的隔離級彆 330
7.7 分布式事務 335
7.7.1 MySQL數據庫分布式事務 335
7.7.2 內部XA事務 340
7.8 不好的事務習慣 341
7.8.1 在循環中提交 341
7.8.2 使用自動提交 343
7.8.3 使用自動迴滾 344
7.9 長事務 347
7.10 小結 349
第8章 備份與恢復 350
8.1 備份與恢復概述 350
8.2 冷備 352
8.3 邏輯備份 353
8.3.1 mysqldump 353
8.3.2 SELECT...INTO OUTFILE 360
8.3.3 邏輯備份的恢復 362
8.3.4 LOAD DATA INFILE 362
8.3.5 mysqlimport 364
8.4 二進製日誌備份與恢復 366
8.5 熱備 367
8.5.1 ibbackup 367
8.5.2 XtraBackup 368
8.5.3 XtraBackup實現增量備份 370
8.6 快照備份 372
8.7 復製 376
8.7.1 復製的工作原理 376
8.7.2 快照+復製的備份架構 380
8.8 小結 382
第9章 性能調優 383
9.1 選擇閤適的CPU 383
9.2 內存的重要性 384
9.3 硬盤對數據庫性能的影響 387
9.3.1 傳統機械硬盤 387
9.3.2 固態硬盤 387
9.4 閤理地設置RAID 389
9.4.1 RAID類型 389
9.4.2 RAID Write Back功能 392
9.4.3 RAID配置工具 394
9.5 操作係統的選擇 397
9.6 不同的文件係統對數據庫性能的影響 398
9.7 選擇閤適的基準測試工具 399
9.7.1 sysbench 399
9.7.2 mysql-tpcc 405
9.8 小結 410
第10章 InnoDB存儲引擎源代碼的編譯和調試 411
10.1 獲取InnoDB存儲引擎源代碼 411
10.2 InnoDB源代碼結構 413
10.3 MySQL 5.1版本編譯和調試InnoDB源代碼 415
10.3.1 Windows下的調試 415
10.3.2 Linux下的調試 418
10.4 cmake方式編譯和調試InnoDB存儲引擎 423
10.5 小結 424
· · · · · · (
收起)