第1 章 SQL 核心 1
1.1 SQL 語言 1
1.2 數據庫的接口 2
1.3 SQL*Plus 迴顧 3
1.3.1 連接到數據庫 3
1.3.2 配置SQL*Plus 環境 4
1.3.3 執行命令 6
1.4 5 個核心的SQL 語句 8
1.5 SELECT 語句 8
1.5.1 FROM 子句 9
1.5.2 WHERE 子句 11
1.5.3 GROUP BY 子句 11
1.5.4 HAVING 子句 12
1.5.5 SELECT 列錶 12
1.5.6 ORDER BY 子句 13
1.6 INSERT 語句 14
1.6.1 單錶插入 14
1.6.2 多錶插入 15
1.7 UPDATE 語句 17
1.8 DELETE 語句 20
1.9 MERGE 語句 22
1.10 小結 24
第2 章 SQL 執行 25
2.1 Oracle 架構基礎 25
2.2 SGA-共享池 27
2.3 庫高速緩存 28
2.4 完全相同的語句 29
2.5 SGA-緩衝區緩存 32
2.6 查詢轉換 35
2.7 視圖閤並 36
2.8 子查詢解嵌套 39
2.9 謂語前推 42
2.10 使用物化視圖進行查詢重寫 44
2.11 確定執行計劃 46
2.12 執行計劃並取得數據行 50
2.13 SQL 執行——總覽 52
2.14 小結 53
第3 章 訪問和聯結方法 55
3.1 全掃描訪問方法 55
3.1.1 如何選擇全掃描操作 56
3.1.2 全掃描與捨棄 59
3.1.3 全掃描與多塊讀取 60
3.1.4 全掃描與高水位綫 60
3.2 索引掃描訪問方法 65
3.2.1 索引結構 66
3.2.2 索引掃描類型 68
3.2.3 索引唯一掃描 71
3.2.4 索引範圍掃描 72
3.2.5 索引全掃描 74
3.2.6 索引跳躍掃描 77
3.2.7 索引快速全掃描 79
3.3 聯結方法 80
3.3.1 嵌套循環聯結 81
3.3.2 排序—閤並聯結 83
3.3.3 散列聯結 84
3.3.4 笛卡兒聯結 87
3.3.5 外聯結 88
3.4 小結 94
第4 章 SQL 是關於集閤的 95
4.1 以麵嚮集閤的思維方式來思考 95
4.1.1 從麵嚮過程轉變為基於集閤的思維方式 96
4.1.2 麵嚮過程vs.基於集閤的思維方式:一個例子 100
4.2 集閤運算 102
4.2.1 UNION 和UNION ALL 103
4.2.2 MINUS 106
4.2.3 INTERSECT 107
4.3 集閤與空值 108
4.3.1 空值與非直觀結果 108
4.3.2 集閤運算中的空值行為 110
4.3.3 空值與GROUP BY 和ORDER BY 112
4.3.4 空值與聚閤函數 114
4.4 小結 114
第5 章 關於問題 116
5.1 問齣好的問題 116
5.2 提問的目的 117
5.3 問題的種類 117
5.4 關於問題的問題 119
5.5 關於數據的問題 121
5.6 建立邏輯錶達式 126
5.7 小結 136
第6 章 SQL 執行計劃 137
6.1 解釋計劃 137
6.1.1 使用解釋計劃 137
6.1.2 理解解釋計劃可能達不到目的的方式 143
6.1.3 閱讀計劃 146
6.2 執行計劃 148
6.2.1 查看最近生成的SQL 語句 149
6.2.2 查看相關執行計劃 149
6.2.3 收集執行計劃統計信息 151
6.2.4 標識SQL 語句以便以後取迴計劃 153
6.2.5 深入理解DBMS_XPLAN 的細節 156
6.2.6 使用計劃信息來解決問題 161
6.3 小結 169
第7 章 高級分組 170
7.1 基本的GROUP BY 用法 171
7.2 HAVING 子句 174
7.3 GROUP BY 的“新”功能 175
7.4 GROUP BY 的CUBE 擴展 175
7.5 CUBE 的實際應用 179
7.6 通過GROUPING()函數排除空值 185
7.7 用GROUPING()來擴展報告 186
7.8 使用GROUPING_ID()來擴展報告 187
7.9 GROUPING SETS 與ROLLUP() 191
7.10 GROUP BY 局限性 193
7.11 小結 196
第8 章 分析函數 197
8.1 示例數據 197
8.2 分析函數剖析 198
8.3 函數列錶 199
8.4 聚閤函數 200
8.4.1 跨越整個分區的聚閤函數 201
8.4.2 細粒度窗口聲明 201
8.4.3 默認窗口聲明 202
8.5 Lead 和Lag 202
8.5.1 語法和排序 202
8.5.2 例1:從前一行中返迴一個值 203
8.5.3 理解數據行的位移 204
8.5.4 例2:從下一行中返迴一個值 204
8.6 First_value 和Last_value 205
8.6.1 例子:使用First_value 來計算最大值 206
8.6.2 例子:使用Last_value 來計算最小值 207
8.7 其他分析函數 207
8.7.1 Nth_value (11gR2) 207
8.7.2 Rank 209
8.7.3 Dense_rank 210
8.7.4 Row_number 211
8.7.5 Ratio_to_report 211
8.7.6 Percent_rank 212
8.7.7 Percentile_cont 213
8.7.8 Percentile_disc 215
8.7.9 NTILE 215
8.7.10 Stddev 216
8.7.11 Listagg 217
8.8 性能調優 218
8.8.1 執行計劃 218
8.8.2 謂語 219
8.8.3 索引 220
8.9 高級話題 221
8.9.1 動態SQL 221
8.9.2 嵌套分析函數 222
8.9.3 並行 223
8.9.4 PGA 大小 224
8.10 組織行為 224
8.11 小結 224
第9 章 Model 子句 225
9.1 電子錶格 225
9.2 通過Model 子句進行跨行引用 226
9.2.1 示例數據 226
9.2.2 剖析Model 子句 227
9.2.3 規則 228
9.3 位置和符號引用 229
9.3.1 位置標記 229
9.3.2 符號標記 230
9.3.3 FOR 循環 231
9.4 返迴更新後的行 232
9.5 求解順序 233
9.5.1 行求解順序 233
9.5.2 規則求解順序 235
9.6 聚閤 237
9.7 迭代 237
9.7.1 一個例子 238
9.7.2 PRESENTV與空值 239
9.8 查找錶 240
9.9 空值 242
9.10 使用Model子句進行性能調優 243
9.10.1 執行計劃 243
9.10.2 謂語前推 246
9.10.3 物化視圖 247
9.10.4 並行 249
9.10.5 Model 子句執行中的分區 250
9.10.6 索引 251
9.11 子查詢因子化 252
9.12 小結 253
第10 章 子查詢因子化 254
10.1 標準用法 254
10.2 SQL 優化 257
10.2.1 測試執行計劃 257
10.2.2 跨多個執行的測試 260
10.2.3 測試查詢改變的影響 263
10.2.4 尋找其他優化機會 266
10.2.5 將子查詢因子化應用到PL/SQL 中 270
10.3 遞歸子查詢 273
10.3.1 一個CONNECT BY 的例子 274
10.3.2 使用RSF 的例子 275
10.3.3 RSF 的限製條件 276
10.3.4 與CONNECT BY 的不同點 276
10.4 復製CONNECT BY 的功能 277
10.4.1 LEVEL 僞列 278
10.4.2 SYS_CONNECT_BY_PATH 函數 279
10.4.3 CONNECT_BY_ROOT 運算符 281
10.4.4 CONNECT_BY_ISCYCLE僞列和NOCYCLE 參數 284
10.4.5 CONNECT_BY_ISLEAF 僞列 287
10.5 小結 291
第11 章 半聯結和反聯結 292
11.1 半聯結 292
11.2 半聯結執行計劃 300
11.3 控製半聯結執行計劃 305
11.3.1 使用提示控製半聯結執行計劃 305
11.3.2 在實例級控製半聯結執行計劃 308
11.4 半聯結限製條件 310
11.5 半聯結必要條件 312
11.6 反聯結 312
11.7 反聯結執行計劃 317
11.8 控製反聯結執行計劃 326
11.8.1 使用提示控製反聯結執行計劃 326
11.8.2 在實例級控製反聯結執行計劃 327
11.9 反聯結限製條件 330
11.10 反聯結必要條件 333
11.11 小結 333
第12 章 索引 334
12.1 理解索引 335
12.1.1 什麼時候使用索引 335
12.1.2 列的選擇 337
12.1.3 空值問題 338
12.2 索引結構類型 339
12.2.1 B-樹索引 339
12.2.2 位圖索引 340
12.2.3 索引組織錶 341
12.3 分區索引 343
12.3.1 局部索引 343
12.3.2 全局索引 345
12.3.3 散列分區與範圍分區 346
12.4 與應用特點相匹配的解決方案 348
12.4.1 壓縮索引 348
12.4.2 基於函數的索引 350
12.4.3 反轉鍵索引 353
12.4.4 降序索引 354
12.5 管理問題的解決方案 355
12.5.1 不可見索引 355
12.5.2 虛擬索引 356
12.5.3 位圖聯結索引 357
12.6 小結 359
第13 章 SELECT 以外的內容 360
13.1 INSERT 360
13.1.1 直接路徑插入 360
13.1.2 多錶插入 363
13.1.3 條件插入 364
13.1.4 DML 錯誤日誌 364
13.2 UPDATE 371
13.3 DELETE 376
13.4 MERGE 380
13.4.1 語法和用法 380
13.4.2 性能比較 383
13.5 小結 385
第14 章 事務處理 386
14.1 什麼是事務 386
14.2 事務的ACID 屬性 387
14.3 事務隔離級彆 388
14.4 多版本讀一緻性 390
14.5 事務控製語句 391
14.5.1 Commit(提交) 391
14.5.2 Savepoint(保存點) 391
14.5.3 Rollback(迴滾) 391
14.5.4 Set Transaction(設置事務) 391
14.5.5 Set Constraints(設置約束) 392
14.6 將運算分組為事務 392
14.7 訂單錄入模式 393
14.8 活動事務 399
14.9 使用保存點 400
14.10 序列化事務 403
14.11 隔離事務 406
14.12 自治事務 409
14.13 小結 413
第15 章 測試與質量保證 415
15.1 測試用例 416
15.2 測試方法 417
15.3 單元測試 418
15.4 迴歸測試 422
15.5 模式修改 422
15.6 重復單元測試 425
15.7 執行計劃比較 426
15.8 性能測量 432
15.9 在代碼中加入性能測量 432
15.10 性能測試 436
15.11 破壞性測試 437
15.12 通過性能測量進行係統檢修 439
15.13 小結 442
第16 章 計劃穩定性與控製 443
16.1 計劃不穩定性:理解這個問題 443
16.1.1 統計信息的變化 444
16.1.2 運行環境的改變 446
16.1.3 SQL 語句的改變 447
16.1.4 綁定變量窺視 448
16.2 識彆執行計劃的不穩定性 450
16.2.1 抓取當前所運行查詢的數據 451
16.2.2 查看一條語句的性能曆史 452
16.2.3 按照執行計劃聚閤統計信息 454
16.2.4 尋找執行計劃的統計方差 454
16.2.5 在一個時間點附近檢查偏差 456
16.3 執行計劃控製:解決問題 458
16.3.1 調整查詢結構 459
16.3.2 適當使用常量 459
16.3.3 給優化器一些提示 459
16.4 執行計劃控製:不能直接訪問代碼 466
16.4.1 選項1:改變統計信息 467
16.4.2 選項2:改變數據庫參數 469
16.4.3 選項3:增加或移除訪問路徑 469
16.4.4 選項4:應用基於提示的執行計劃控製機製 470
16.4.5 大綱 470
16.4.6 SQL 概要文件 481
16.4.7 SQL 執行計劃基綫 496
16.4.8 基於提示的執行計劃控製機製總結 502
16.5 結論 502
· · · · · · (
收起)