數據庫高效優化 : 架構、規範與 SQL 技巧
內容描述
SQL是最重要的關係數據庫操作語言。
SQL語句的運行效率,對於數據庫的整體性能至關重要。
因此,SQL語句的優化就成為數據庫專業人員必須掌握的一門技能。
很多初學者經常有如何入門、提高SQL語句優化能力的困惑。
本書規避了市面上大多關於SQL優化的書籍內容過於深奧問題,
以一線開發工程師的言語和視角展開,理論與實踐並重,
不僅適合初學者,也適合中端技術人員。
本書以大量案例為依托,系統講解了SQL語句優化的原理、方法及技術要點,
尤為註重實踐,在章節中引入了大量的案例,便於學習者實踐、測試,反复揣摩。
全書分為四篇:
引言篇,總結了實際工作中常見的問題,並通過真實案例讓讀者直觀感受到SQL語句優化的重要。
同時在每個案例後面,還針對案例出現的問題進行了總結;
原理篇,主要講解了和SQL語句優化相關的基礎知識及必要的一些操作,
包括優化器、成本、執行計劃、統計信息、語句解析、游標、綁定變量、數據對像等諸多方面;
優化篇,這是本書的重點,詳細講述了優化器對於SQL語句的多種處理方式,
包括查詢轉換、數據對象訪問方式、表關聯、半/反連接、子查詢、排序、並行等等。
讀者了解了這些方式,可以更好地理解優化器的行為,也就使優化更加有的放矢。
這部分實戰性極強,讀者可以作為案頭參考資料,隨時查閱,反复實踐;
實踐篇,從數據設計開發規範、數據庫畫像、SQL優化方法論、
AWR報告解讀及數據庫審核平台實踐等幾個角度全面講解在實際工作中如何通過優化SQL,
大幅度提高數據庫的性能。
目錄大綱
目錄
推薦序
前言
第一部分引入篇
第0章引言2
第1章與SQL優化相關的幾個案例4
案例1一條SQL引發的“血案”4
案例2糟糕的結構設計帶來的問題6
案例3規範SQL寫法好處多9
案例4 “月底難過”11
案例5 COUNT(*)到底能有多快13
案例6 “抽絲剝繭”找出問題所在17
第二部分原理篇
第2章優化器與成本22
2.1優化器22
2.1 .1基於規則的優化器23
2.1.2基於成本的優化器25
2.1.3對比兩種優化器26
2.1.4優化器相關參數27
2.1.5優化器相關Hint30
2.2成本35
2.2.1基本概念35
2.2.2計算公式36
2.2.3計算示例36
第3章執行計劃40
3.1概述40
3.1.1什麼是執行計劃40
3.1.2庫執行計劃存儲方式42
3.2解讀執行計劃43
3.2.1執行順序43
3.2 .2訪問路徑45
3.3執行計劃操作45
3.3.1查看執行計劃45
3.3.2固定執行計劃72
3.3.3修改執行計劃80
第4章統計信息84
4.1統計信息分類84
4.1.1系統統計信息84
4.1.2對象統計信息87
4.1.3數據字典統計信息109
4.1.4內部對象統計信息109
4.2統計信息操作109
4.2.1系統統計信息110
4.2.2對象統計信息111
4.2.3數據字典統計信息115
4.2.4內部對象統計信息115
第5章SQL解析與游標116
5.1解析步驟116
5.2解析過程117
5.3游標示例119
第6章綁定變量122
6.1使用方法122
6.2綁定變量與解析124
6.3游標共享129
第7章SQL優化相關對象131
7.1表131
7.2字段137
7.3索引140
7.4視圖148
7.5函數149
7.6數據鏈(DB_LINK)150
第8章SQL優化相關存儲結構153
8.1表空間153
8.2段154
8.3區155
8.4塊156
第9章特有SQL160
9.1 MERGE160
9.2 INSERT ALL162
9.3 WITH162
9.4 CONNECT BY /START WITH163
第三部分SQL篇
第10章查詢轉換166
10.1查詢轉換的分類及說明166
10.2查詢轉換—子查詢類167
10.3查詢轉換—視圖類174
10.4查詢轉換—謂詞類178
10.5查詢轉換—消除類180
10.6查詢轉換—其他181
第11章訪問路徑189
11.1表訪問路徑189
11.1.1全表掃描189
11.1.2 ROWID掃描193
11.1.3採樣掃描194
11.2 B樹索引訪問路徑195
11.3位圖索引訪問路徑205
11.4其他訪問路徑210
第12章表間關聯215
12.1關聯關係215
12.2表關聯實現方法218
12.3嵌套循環連接220
12.4排序合併連接226
12.5哈希連接232
12.6其他連接方式238
第13章半連接與反連接243
13.1半連接243
13.2反連接246
第14章排序250
14.1引發排序的操作250
14.2避免和減少排序251
14.2.1優化原則及基本方法251
14.2.2避免排序的示例252
14.3排序過程及內存使用255
14.4執行計劃中的“Sort”258
第15章子查詢262
15.1處理方式262
15.2子查詢分類263
15.2.1按照語法分類263
15.2.2按照謂詞分類263
15.2.3示例264
15.3子查詢優化266
15.4子查詢特殊問題272
15.4.1空值問題272
15.4.2 OR問題274
15.4.3 [NOT] IN/EXISTS問題275
第16章並行276
16.1並行操作276
16.1.1並行查詢277
16.1.2並行DML280
16.1.3並行DDL283
16.2並行級別286
16.3並行原理286
16.3.1從屬進程286
16.3.2粒度287
第四部分實踐篇
第17章數據庫設計開發規範292
17.1 Oracle結構設計規範292
17.1.1建模工具292
17.1.2命名規範294
17.1.3數據類型296
17.1.4表設計297
17.1.5字段設計299
17.1.6約束設計299
17.1.7索引設計300
17.1.8視圖設計303
17.1.9包設計303
17.1.10範式與逆範式304
17.1.11其他設計問題305
17.2 Oracle開發規範306
17.2.1書寫規範306
17.2.2編碼規範307
17.2.3註釋規範307
17.2.4語法規範308
17.3 MySQL結構設計規範312
17.3.1命名規則313
17.3. 2使用原則314
17.3.3規模規則315
17.3.4字段規則315
17.3.5索引規則319
17.3.6字符集321
17.3.7逆範式設計321
17.4 MySQL開發規範322
17.4.1基本原則322
17.4.2語句規範322
第18章架構設計之數據庫承載力評估327
18.1評估工作327
18.1.1建立性能基線327
18.1.2建立業務壓力模型329
18.1.3模擬壓力測試331
18.2優化步驟331
第19章數據庫畫像335
19.1你了解你的數據庫嗎335
19.2畫像設計思路336
19.3畫像報告解讀336
19.3.1概要信息336
19.3.2空間信息336
19.3.3對象信息337
19.3.4訪問特徵339
19.3.5資源消耗341
19.3.6 SQL語句342
第20章數據庫審核平台實踐:功能343
20.1背景說明343
20.2平台選型347
20.3平台定位348
20.4平台原理349
20.5推進方法350
第21章數據庫審核平台實踐:實現352
21.1平台設計352
21.2流程圖354
21.3數據結構355
21.4主要模塊356
21.4.1數據採集356
21.4.2規則解析358
21.4.3系統管理364
21.5審核結果展示366
第22章數據庫審核平台實踐:規則370
22.1對象級370
22.1.1 Oracle370
22.1.2 MySQL379
22.2執行計劃級384
22.2.1 Oracle384
22.2.2 MySQL389
22.3執行特徵級392
22.3.1 Oracle392
22.3.2 MySQL394
22.4文本級395
22.4.1 Oracle395
22.4.2 MySQL400
附錄A常用技巧401
附錄B SQL優化參數406
附錄C SQL優化數據字典409
附錄D SQL優化等待事件411
附錄E SQL優化提示414