基於Oracle的SQL最佳化

基於Oracle的SQL最佳化

這是一本與眾不同的書,它的目的是使讀者真正掌握如何在 Oracle資料庫里寫出高質量的 SQL語句,以及如何在Oracle資料庫里對有性能問題的 SQL做診斷和調整。

基本介紹

  • 中文名:基於Oracle的SQL最佳化
  • 切入點:Oracle處理 SQL的本質和原理
  • 作者:崔華
  • 內容:Oracle資料庫
內容簡介,作者簡介,目錄簡介,

內容簡介

《基於Oracle的SQL最佳化》從Oracle處理 SQL的本質和原理入手,由淺入深、系統地介紹了Oracle資料庫里的最佳化器、執行計畫、Cursor和綁定變數、查詢轉換、統計信息、Hint和並行等這些與SQL最佳化息息相關的本質性內容,並輔以大量極具借鑑意義的一線SQL最佳化實例,闡述了作者倡導的“從本質和原理入手,以不變應萬變”的最佳化思路,最後還介紹了作者在實際工作中總結出來的Oracle資料庫里 SQL最佳化的方法論。
本書適用於使用 Oracle資料庫的開發人員、Oracle DBA和其他對Oracle資料庫感興趣的人員,也可以作為各院校相關專業的教學輔導和參考用書,或作為相關培訓機構的培訓教材。

作者簡介

崔華,網名dbsnake,Oracle ACE, ACOUG成員。
資深Oracle資料庫工程師,擁有Oracle資料庫技術各個領域的經驗,尤其是在Oracle資料庫性能最佳化與備份恢複方面經驗豐富。
他與其他人合作編寫了多本Oracle技術書籍,他經常在Oracle相關活動中發表演講並在自己的部落格上撰寫了大量技術文章。

目錄簡介

第 1章 Oracle里的最佳化器...................................1
1.1 什麼是 Oracle里的最佳化器 ...........................1
1.1.1 基於規則的最佳化器............................2
1.1.2 基於成本的最佳化器........................9
1.1.2.1 集的勢 ..............................11
1.1.2.2 可選擇率 ...............................11
1.1.2.3 可傳遞性..............................16
1.1.2.4 CBO的局限性...................................18
1.2 最佳化器的基礎知識 .......................19
1.2.1 最佳化器的模式..................................19
1.2.2 結果集............................21
1.2.3 訪問數據的方法................................22
1.2.3.1 訪問表的方法.............................22
1.2.3.1.1 全表掃描 ....................................22
1.2.3.1.2 ROWID掃描 .....................................23
1.2.3.2 訪問索引的方法 .....................................24
1.2.3.2.1 索引唯一性掃描 ...............................25
1.2.3.2.2 索引範圍掃描 .......................................25
1.2.3.2.3 索引全掃描 ......................................28
1.2.3.2.4 索引快速全掃描 ...............................29
1.2.3.2.5 索引跳躍式掃描 ...............................31
1.2.4 表連線..........................33
1.2.4.1 表連線的類型......................................34
1.2.4.1.1 內連線.............................................34
1.2.4.1.2外連線.................................................37
1.2.4.2 表連線的方法............................................47
1.2.4.2.1 排序合併連線 ..................................47
1.2.4.2.2 嵌套循環連線 ...................................48
1.2.4.2.3 哈希連線 ..........................................51
1.2.4.2.4 笛卡兒連線 ......................................56
1.2.4.3 反連線 ...........................................58
1.2.4.4 半連線 ................................63
1.2.4.5 星型連線............................................65
1.3 最佳化器模式對 CBO計算成本帶來巨大影響的實例...............66
1.4 總結.......................80
第 2章 Oracle里的執行計畫 ........................... 82
2.1 什麼是執行計畫.................................82
2.2 如何查看執行計畫 ..........................85
2.2.1 explain plan命令....................................86
2.2.2 DBMS_XPLAN包............................89
2.2.3 AUTOTRACE開關 ...............................95
2.2.4 10046事件與 tkprof命令.............................99
2.3 如何得到真實的執行計畫..................................102
2.4 如何查看執行計畫的執行順序.............................118
2.5 Oracle里的常見執行計畫 .......................122
2.5.1 與表訪問相關的執行計畫.................................122
2.5.2 與 B樹索引相關的執行計畫.................................124
2.5.3 與點陣圖索引相關的執行計畫...................................129
2.5.4 與表連線相關的執行計畫.......................................138
2.5.5其他典型的執行計畫...............................................146
2.5.5.1 AND-EQUAL(INDEX MERGE).....................146
INDEX JOIN ................................148
2.5.5.2 VIEW.......................149
2.5.5.3FILTER ..................................151
2.5.5.4 SORT ....................................154
2.5.5.5
2.5.5.6 UNION/UNION ALL......................167
CONCAT..................................................168
2.5.5.7
CONNECTBY...................................................171
2.5.5.8
2.6 Oracle里執行計畫的穩定 ................................172
2.6.1 使用 SQL Profile來穩定執行計畫 ...........................173
2.6.1.1 Automatic類型的 SQL Profile...............................173
2.6.1.2 Manual類型的 SQLProfile......................................179
2.6.2 使用SPM來穩定執行計畫........................................190
2.7 總結..............................203
第 3章 Oracle里的 Cursor和綁定變數 ......................... 204
3.1 Oracle里的 Cursor.............................204
3.1.1 Oracle里的 Shared Cursor.............................204
3.1.1.1 Shared Cursor的含義..........................................204
3.1.1.2 硬解析................................................212
3.1.1.3 軟解析 ...................................214
3.1.2 Oracle里的 SessionCursor..............................215
3.1.2.1 Session Cursor的含義.....................................215
3.1.2.2 Session Cursor的相關參數解析...........................218
OPEN_CURSORS.........................................218
3.1.2.2.1 SESSION_CACHED_CURSORS............................219
3.1.2.2.2CURSOR_SPACE_FOR_TIME..............................221
3.1.2.2.3
3.1.2.3 Session Cursor的種類和用法 .............................222
3.1.2.3.1 隱式游標 ........................................222
3.1.2.3.2 顯式游標 ........................................225
3.1.2.3.3 參考游標 ........................................230
3.2 Oracle里的綁定變數 ...............................237
3.2.1 綁定變數的作用....................................237
3.2.2 綁定變數的典型用法.........................................238
3.2.3 綁定變數的使用原則和最佳實踐..............................245
3.2.3.1 PL/SQL批量綁定模板一 ...................................245
3.2.3.2 PL/SQL批量綁定模板二.....................................247
3.2.4 綁定變數窺探............................................258
3.2.5 綁定變數分級..................................270
3.2.6 綁定變數的個數不宜太多........................................276
3.2.7 批量綁定時如何處理錯誤.......................................280
3.2.8 如何得到已執行的目標 SQL中綁定變數的值 ..........283
3.3 Oracle里的游標共享 .......288
3.3.1 常規游標共享..............................289
3.3.2 自適應游標共享........................297
3.4 Oracle里的套用類型 ...............................320
3.4.1 SessionCursor的生命周期.........................................320
3.4.2套用類型一(硬解析)................................................322
3.4.3套用類型二(軟解析)...............................................323
3.4.4套用類型三(軟軟解析)..........................................323
3.4.5 套用類型四(一次解析、多次執行)....................324
3.4.6 四種套用類型的實測性能對比..............................325
3.5 總結.............................333
第 4章 Oracle里的查詢轉換 .......................... 335
4.1 Oracle里查詢轉換的作用 ................335
4.2 子查詢展開.................................336
4.3 視圖合併............................344
4.3.1 簡單視圖合併...........................345
4.3.2 外連線視圖合併..................351
4.3.3 複雜視圖合併.....................354
4.4 星型轉換.....................365
4.5 連線謂詞推入 ................372
4.6 連線因式分解 ................379
4.7 表擴展 .......................387
4.8 表移除 .............396
4.9 Oracle如何處理 SQL語句中的 IN.............401
IN-List Iterator .................402
4.9.1
4.9.2 IN-List Expansion / OR Expansion ................404
IN-List Filter .............409
4.9.3
4.9.4 對 IN做子查詢展開/視圖合併 .............410
4.10 查詢轉換的綜合套用實例(邏輯讀從 200萬降到 6) .....413
4.11總結..............................420
第 5章 Oracle里的統計信息 ........ 422
5.1 什麼是 Oracle里的統計信息...........422
5.2 Oracle里收集與查看統計信息的方法 .............423
5.2.1 收集統計信息...................423
5.2.1.1 用 ANALYZE命令收集統計信息...........423
5.2.1.2 用 DBMS_STATS包收集統計信息..........428
5.2.1.3 ANALYZE和 DBMS_STATS的區別........432
5.2.2 查看統計信息................433
5.3 表的統計信息 ..............435
5.3.1 表統計信息的種類和含義.........435
5.3.2 表統計信息不準導致 SQL性能問題的實例 .................437
5.4 索引的統計信息..............440
5.4.1 索引統計信息的種類和含義.................440
5.4.2 聚簇因子的含義及重要性............442
5.5 列的統計信息 ..................450
5.5.1 列統計信息的種類和含義..............450
5.5.2 列統計信息不準導致謂詞越界的實例..........454
5.5.3 直方圖........................460
5.5.3.1 直方圖的含義...............460
5.5.3.2 直方圖的類型.................462
5.5.3.2.1 Frequency類型的直方圖 ...........463
5.5.3.2.2 Height Balanced類型的直方圖 ..................471
5.5.3.3 直方圖的收集方法................................475
5.5.3.4 直方圖對 CBO的影響 ....................477
5.5.3.4.1 直方圖對 Shared Cursor的影響 ............
擴展學習
Oracle SQL語句性能調優技術技巧解析
一、操作符最佳化
二、SQL書寫的影響
三、SQL語句索引的利用
四、其他

相關詞條

熱門詞條

聯絡我們