下載地址: 網盤下載
內容簡介 · · · · · ·
《資料庫索引設計與最佳化》提供了一種簡單、高效、通用的關係型資料庫索引設計方法。作者通過系統的講解及大量的案例清晰地闡釋了關係型資料庫的訪問直接選取原理,以及表和索引的掃描方式,詳盡地講解了如何快速地估算SQL 啟動並執行CPU 時間及執行時間,協助讀者從原理上理解SQL、表及索引結構、訪問方式等對關係型資料庫造成的影響,並能夠運用量化的方法進行判斷和最佳化,指導關係型資料庫的索引設計。
《資料庫索引設計與最佳化》適用於已經具備了SQL 這一關係型語言相關知識,希望通過理解SQL 效能相關的內容,或者希望通過瞭解如何有效地設計表和索引而從中獲益的人員。另外,《資料庫索引設計與最佳化》也同樣適用於希望對新硬體的引入所可能帶來的變化做出更好判斷的資深人士。 作者簡介 · · · · · ·
Tapio Lahdenmaki,資料庫效能顧問,教授通用索引設計課程。他在IBM公司工作了三十多年,是公司全球課程中有關DB2 (for z/OS)效能相關課程的主要作者。Michael Leach,關係型Database Advisor,已從IBM公司退休,他擁有二十年的應用系統及資料庫課程的教授經驗。兩位作者的文章均被翻譯成了多國語言廣為傳播。他們有關索引設計的方法被成功應用於許多核心系統。 目錄 · · · · · · 第1 章 概述 ........................ 1
關於SQL 效能的另一本書 ......... 1
不合適的索引 .............................. 3
誤區和誤解 ........... 4
誤區1:索引層級不要超過5 層 ...................... 5
誤區2:單表的索引數不要超過6 個 ............... 6
誤區3:不應該索引不穩定的列 ...................... 6
樣本..... 7
磁碟機使用率 .............. 7
系統化的索引設計 ...................... 8
第2章 表和索引結構 ........ 10
介紹 .......... 10
索引頁和表頁 .................... 11
索引行 ...... 11
索引結構... 12
表行 .......... 12
緩衝池和磁碟I/O ...................... 12
從DBMS 緩衝池進行的讀取 .......................... 13
從磁碟機進行的隨機I/O ......................... 13
從磁碟伺服器緩衝進行的讀取 ....................... 14
從磁碟機進行的順序讀取 ....................... 15
輔助式隨機讀 .................... 15
輔助式順序讀 .................... 18
同步I/O 和非同步I/O ........... 18
硬體特性... 19
DBMS 特性 ............................... 20
頁 ...... 20
表聚簇 ................................ 21
索引行 ................................ 21
表行... 22
索引組織表 ........................ 22
頁鄰接 ................................ 23
B 樹索引的替代品 ............. 24
聚簇的許多含義 ................ 25
第3 章 SQL 處理過程 ....... 27
簡介 .......... 27
謂詞 .......... 27
評註... 28
最佳化器及訪問路徑 .................... 28
索引片及匹配列 ................ 29
索引過濾及過濾列 ............ 29
訪問路徑術語 .................... 31
監控最佳化器 ........................ 32
協助最佳化器(統計資訊) . 32
協助最佳化器(FETCH 調用的次數) .............. 32
何時確定訪問路徑 ............ 33
過濾因子... 34
組合謂詞的過濾因子 ......... 35
過濾因子對索引設計的影響 ........................... 37
物化結果集 ................................ 39
遊標回顧 ............................ 39
方式1:一次FETCH 調用物化一條記錄 ...... 40
方式2:提前物化 ............. 41
資料庫設計人員必須牢記 . 41
練習 .......... 41
第4 章 為SELETE 語句建立理想的索引 ........ 43
簡介 .......... 43
磁碟及CPU 時間的基礎假設 ... 44
不合適的索引 ............................ 44
三星索引——查詢語句的理想索引 ....................... 45
星級是如何給定的 ............ 46
範圍謂詞和三星索引 ......... 48
為查詢語句設計最佳索引的演算法 ........................... 49
候選A ................................ 50
候選B ................................ 50
現今排序速度很快——為什麼我們還需要候選B .......................... 51
需要為所有查詢語句都設計理想索引嗎 ................ 52
完全多餘的索引 ................ 52
近乎多餘的索引 ................ 53
可能多餘的索引 ................ 53
新增一個索引的代價 ................ 54
回應時間 ............................ 54
磁碟負載 ............................ 55
磁碟空間 ............................ 56
一些建議... 57
練習 .......... 58
第5 章 前瞻性的索引設計 . 59
發現不合適的索引 .................... 59
基本問題法(BQ) ................... 59
注意... 60
快速上限估演算法(QUBE) ...... 61
服務時間 ............................ 62
排隊時間 ............................ 62
基本概念:訪問 ................ 63
計算訪問次數 .................... 65
FETCH 處理....................... 66
主要訪問路徑的QUBE 樣本 .......................... 67
使用滿足需求的成本最低的索引還是所能達到的最優索引:樣本1 ..... 72
該事務的基本問題 ............ 73
對該事務上限的快速估算 . 73
使用滿足需求的成本最低的索引還是所能達到的最優索引 .......... 74
該事務的最佳索引 ............ 75
半寬索引(最大化索引過濾) ....................... 75
寬索引(只需訪問索引) . 76
使用滿足需求的成本最低的索引還是所能達到的最優索引:樣本2 .... 77
範圍事務的BQ 及QUBE .. 78
該事務的最佳索引 ............ 79
半寬索引(最大化索引過濾) ....................... 80
寬索引(只需訪問索引) . 81
何時使用QUBE ........................ 82
第6 章 影響索引設計過程的因素 .................... 83
I/O 時間估算的驗證 .................. 83
多個窄索引片 ............................ 84
簡單就是美(和安全) ..... 86
困難謂詞... 87
LIKE 謂詞 .......................... 87
OR 操作符和布爾謂詞 ...... 88
IN 謂詞............................... 89
過濾因子隱患 ............................ 90
過濾因子隱患的例子 ................ 92
最佳索引 ............................ 95
半寬索引(最大化索引過濾) ....................... 96
寬索引(只需訪問索引) . 97
總結... 97
練習 .......... 99
第7 章 被動式索引設計 .. 100
簡介 ........ 100
EXPLAIN 描述了所選擇的訪問路徑 ................... 101
全表掃描或全索引掃描 ... 101
對結果集排序 .................. 101
成本估算 .......................... 102
資料庫管理系統特定的EXPLAIN 選項及限制 ............................ 102
監視揭示現實 .......................... 103
效能監控器的演化 .......... 104
LRT 層級的異常監視 .............. 106
程式粒度的均值是不夠的 ............................. 106
異常報告舉例:每個尖刺一行 ..................... 106
問題製造者和受害者 ....... 108
有最佳化空間的問題製造者和無最佳化空間的問題製造者 ................ 108
有最佳化空間的問題製造者 ............................. 109
調優的潛在空間 .............. 111
無最佳化空間的問題製造者 ............................. 114
受害者 .............................. 115
尋找慢的SQL 調用 ......... 117
調用層級的異常監視 .............. 118
Oracle 舉例 ...................... 121
SQL Server 舉例 .............. 123
結論. 125
資料庫管理系統特定的監視問題 ......................... 126
尖刺報告 .......................... 127
練習 ........ 127
第8 章 為表串連設計索引 ............................. 129
簡介 ........ 129
兩個簡單的表串連 .................. 131
例8.1:CUST 表作為外層表 ........................ 131
例8.2:INVOICE 表作為外層表 .................. 132
表訪問順序對索引設計的影響 ............................. 133
案例研究 .......................... 133
現有索引 .......................... 136
理想索引 .......................... 142
理想索引,每事務物化一屏結果集 .............. 146
理想索引,每事務物化一屏結果集且遇到FF 缺陷 ..................... 149
基本串連的問題(BJQ) ........ 151
結論:嵌套迴圈串連 ....... 153
預測表的訪問順序 .................. 153
合并掃描串連和雜湊串連 ....... 155
合并掃描串連 .................. 155
例8.3:合并掃描串連 ..... 155
雜湊串連 .......................... 157
程式C:由最佳化器選擇MS/HJ(在現有索引條件下) ................ 158
理想索引 .......................... 159
嵌套迴圈串連VS. MS/HJ 及理想索引 ................. 161
嵌套迴圈串連VS. MS/HJ ...........161
嵌套迴圈串連VS.理想索引 .......................... 162
串連兩張以上的表 .................. 163
為什麼串連的效能表現較差 ... 166
模糊的索引設計 .............. 166
最佳化器可能選擇錯誤的表訪問路徑 .............. 166
樂觀的表設計 .................. 166
為子查詢設計索引 .................. 167
為UNION 語句設計索引 ........ 167
對於表設計的思考 .................. 167
冗餘資料 .......................... 167
無意識的表設計 .............. 171
練習 ........ 173
第9 章 星型串連 ............. 175
介紹 ........ 175
維度資料表的索引設計 .................. 177
表訪問順序的影響 .................. 178
事實表的索引 .......................... 179
匯總表 .... 182
第10 章 多索引訪問 ....... 184
簡介 ........ 184
索引與 .... 184
與查詢表一同使用索引與 ............................. 186
多索引訪問和事實資料表 ............................. 187
用位元影像索引進行多索引訪問 ......................... 187
索引或 .... 188
索引串連. 189
練習 ........ 190
第11 章 索引和索引重組 191
B 樹索引的物理結構 ............... 191
DBMS 如何尋找索引行 .......... 192
插入一行時會發生什麼 .......... 193
葉子頁的分裂嚴重嗎 .............. 194
什麼時候應該對索引進行重組 ............................. 196
插入模式 .......................... 196
索引列的穩定性 ...................... 205
長索引行............207
舉例:對順序敏感的批處理任務 ......................... 208
表亂序(存在聚簇索引) ............................. 211
表亂序(沒有以CNO 開頭的聚簇索引) .... 212
儲存在葉子頁中的表行 .......... 212
SQL Server ....................... 212
Oracle ............................... 213
索引重組的代價 ...................... 214
分裂的監控 .............................. 215
總結 ........ 216
第12 章 資料庫管理系統相關的索引限制 ..... 219
簡介 ........ 219
索引列的數量 .......................... 219
索引列的總長度 ...................... 220
變長列 .... 220
單表索引數量上限 .................. 220
索引大小上限 .......................... 220
索引鎖定. 221
索引行壓縮 .............................. 221
資料庫管理系統索引建立舉例 ............................. 222
第13 章 資料庫索引選項 224
簡介 ........ 224
索引行壓縮 .............................. 224
索引鍵以外的其他索引列 ....... 225
唯一約束 ........... 227
從不同的方向掃描資料庫索引 ............................. 227
索引鍵截斷 .............................. 228
基於函數的索引 ...................... 228
索引跳躍式掃描 ...................... 229
塊索引 .... 230
資料分區的二級索引 .............. 230
練習 ........ 231
第14 章 最佳化器不是完美的 ........................... 232
簡介 ........ 232
最佳化器並不總能看見最佳方案 ............................. 234
匹配及過濾問題 .............. 234
非BT 謂詞 ....................... 234
無法避免的排序 .............. 237
不必要的表訪問 .............. 238
最佳化器的成本估算可能錯得離譜 ......................... 239
使用綁定變數的範圍謂詞 ............................. 239
偏斜分布 .......................... 241
相關列 .............................. 242
部分索引鍵的警示故事 ... 243
成本估算公式 .......................... 246
估算I/O 時間 ................... 247
估算CPU 時間 ................. 248
協助最佳化器處理估算相關的問題 ................. 249
最佳化器的問題是否會影響索引設計 ..................... 252
練習 ........ 253
第15 章 其他評估事項 .... 254
QUBE 公式背後的假設條件 ... 254
記憶體中的非葉子索引頁 .......... 255
例子. 255
磁碟伺服器讀緩衝的影響 ............................. 256
緩衝子池 .......................... 258
長記錄 .............................. 259
慢速順序讀 ...................... 259
實際的回應時間可能比QUBE 評估值短得多 ..... 259
葉子頁和表頁緩衝在緩衝池中 ..................... 260
識別低成本的隨機訪問 ... 262
輔助式隨機讀取 .............. 262
輔助式順序讀 .................. 265
評估CPU 時間(CQUBE) .... 265
單次順序訪問的CPU 時間 ........................... 265
單次隨機訪問的CPU 時間 ........................... 267
單次FETCH 調用的CPU 時間 ..................... 269
每排序一行的平均CPU 時間........................ 270
CPU 評估舉例 ......................... 270
寬索引還是理想索引 ....... 270
嵌套迴圈(及反範式化)還是MS/HJ.......... 271
合并掃描與雜湊串連的比較 ......................... 274
跳躍式順序掃描 .............. 275
CPU 時間仍然不可忽視 .. 276
第16 章 組織索引設計過程 ........................... 277
簡介 ........ 277
電腦輔助式索引設計 .......... 278
設計出色索引的9 個步驟 ....... 280
參考文獻 ........................... 282
術語表 ................ 283
索引 ................291
下載地址: 網盤下載