SQL是最重要的關系數據庫操作語言。SQL語句的運行效率,對于數據庫的整體性能至關重要。因此,SQL語句的優化就成為數據庫專業人員必須掌握的一門技能。作為一個長期從事數據庫工作的技術人員,經常面對很多初學者對如何入門、如何提高SQL語句優化能力的困惑。本書規避了市面上大多關于SQL優化的書籍講解內容過于深奧的問題,以一線開發工程師的語言和視角展開,理論與實踐并重,不僅適合初學者,也適合中端技術人員進一步提高。
本書以大量案例為依托,系統講解了SQL語句優化的原理、方法及技術要點。本書尤為注重實踐,在章節中引入了大量的案例,便于學習者實踐、測試,反復揣摩。
全書分為三篇:
引言篇,總結了實際工作中常見的問題,并通過真實案例讓讀者直觀感受到SQL語句優化的重要。同時在每個案例后面,還針對案例中出現的問題進行了總結。
原理篇,主要講解了和SQL語句優化相關的基礎知識及必要的一些操作,包括了優化器、成本、執行計劃、統計信息、語句解析、游標、綁定變量、數據對象等諸多方面。
實戰篇,這是本書的重點,詳細講述了優化器對于SQL語句的多種處理方式,包括查詢轉換、數據對象訪問方式、表關聯、半/反連接、子查詢、排序、并行等等。讀者了解了這些內容,可以更好地理解優化器的行為,從而使優化更加有的放矢。這部分實戰性極強,讀者可以作為案頭參考資料,隨時查閱,反復實踐。
另外,本書還提供了5個附錄,這部分對書中提到的案例編寫方式及相關知識點進行了詳細說明,目的是幫助讀者,尤其是初學者更好地進行實踐。
所有內容均來自一線真實項目,以一線開發工程師的語言和視角展開介紹,無論是初學者還是中端技術人員,都可輕松接受、吸收;15年DBA經驗結晶,依托近百個真實案例,詳細剖析SQL語句優化的原理、方法及技術要點,所講內容均可直接落地。Oracle數據庫使用十分廣泛,長期盤踞數據庫使用排行榜首位。而SQL語句作為訪問數據的接口語言,其運行效率的高低直接決定了數據庫的整體性能。SQL語句優化本身覆蓋面較廣,涉及數據庫領域的諸多方面,其中優化器部分尤為復雜。本書作者根據多年的工作經驗,圍繞SQL優化這一核心主題,多角度闡述了SQL語句優化的各個方面。內容兼顧技術的深度和廣度,結合大量案例,方便讀者更好地了解SQL語句優化的本質。本書特別適合廣大從事數據庫開發工作的初中級讀者閱讀,可幫助這部分讀者深入學習與SQL優化相關的原理方法和技巧,為以后的工作和進一步提高打下良好的基礎。本書既是一本不錯的學習資料,也可作為案頭必備的手冊,供讀者隨時翻閱。
韓鋒
早年從事軟件開發工作,后因個人興趣轉入數據庫領域。有著多年的一線數據庫架構、設計、開發經驗,曾擔任多家公司首席DBA、數據庫架構師等職。現就職于宜信,曾就職于當當網、TOM在線等公司。精通多種關系型數據庫,包括Oracle、MySQL、GreenPlum、Informix等,對NoSQL及大數據相關技術也很感興趣,實踐經驗豐富。
前言
第一篇引入篇
第0章引言
第1章與SQL優化相關的幾個案例
案例1-條SQL引發的血案
案例2糟糕的結構設計帶來的問題
案例3規范SQL寫法好處多
案例4“月底難過
案例5 COUNT(*)到底能有多快
案例6“抽絲剝繭”找出問題所在
第二篇原理篇
第2章優化器與成本
2.1優化器
2.1.1基于規則的優化器
2.1.2基于成本的優化器
2.1.3對比兩種優化器
2.1.4優化器相關參數
優化器相關Hint
基本概念
計算公式
計算示例
第3章執行計劃
3.1概述
3.1.1什么是執行計劃
3.1.2庫執行計劃存儲方式
3.2解讀執行計劃
3.2.1執行順序
3.2.2訪問路徑
3.3執行計劃操作
3.3.1查看執行計劃
3.3.2固定執行計劃
3.3.3修改執行計劃
第4章統計信息
4.1統計信息分類
4.1.1系統統計信息
4.1.2對象統計信息
4.1.3數據字典統計信息
4.1.4內部對象統計信息
?4.2統計信息操作
4.2.1系統統計信息
4.2.2對象統計信息
4.2.3數據字典統計信息
4.2.4內部對象統計信息
第5章SQL解析與游標
5.1解析步驟
5.2解析過程
5.3游標示例
第6章綁定變量
6.1使用方法
6.2綁定變量與解析
6.3游標共享
第7章SQL優化相關對象
7.1表
7.2字段
7.3索引
7.4視圖
7.5函數
7.6數據鏈(DB-LINK)
第8章SQL優化相關存儲結構
8.1表空間
8.2段
8.3區
8.4塊
第9章特有SQL
9.1 MERGE-----
9.2 INSERT ALL
9.4 CONNECT BY/START WITH
第三篇實戰篇
第10章查詢轉換
10.1查詢轉換的分類及說明
10.2查詢轉換——子查詢類
10.3查詢轉換——視圖類
10.4查詢轉換——謂詞類
10.5查詢轉換——消除類
10.6查詢轉換——其他
第11章訪問路徑
11.1表訪問路徑
11.1.1全表掃描
11.1.2 ROWID掃描
11.1.3采樣掃描
11.2 B樹索引訪問路徑
1113位圖索引訪問路徑
11.4其他訪問路徑
第12章表間關聯
12.1關聯關系
12.2表關聯實現方法
12.3嵌套循環連接
12.4排序合并連接
12.5哈希連接
12.6其他連接方式
第13章半連接與反連接
13.1半連接
?13.2反連接
第14章排序
14.1引發排序的操作
14.2避免和減少排序
14.2.1優化原則及基本方法
14.2.2避免排序的示例
14.3排序過程及內存使用
14.4執行計劃中的“Sort”
第15章子查詢
15.1處理方式
15.2子查詢分類
15.2.1按照語法分類
15.2.2按照謂詞分類
15.2.3示例
15.3子查詢優化
15.4子查詢特殊問題
15.4.1空值問題
15.4.2 0R問題
15.4.3 [NOT] IN/EXISTS問題
第16章并行
16.1并行操作
16.1.1并行查詢
16.1.2并行DML
16.1.3并行DDL
16.2并行級別
16.3并行原理
16.3.1從屬進程
16.3.2粒度
附錄A常用技巧
附錄BSQL優化參數
附錄CSQL優化數據字典
附錄DSQL優化等待事件
附錄ESQL優化提示