內容簡介
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
21 最佳化器22
211 基於規則的最佳化器23
212 基於成本的最佳化器25
213 對比兩種最佳化器26
214 最佳化器相關參數27
215 最佳化器相關Hint30
22 成本35
221 基本概念35
222 計算公式36
223 計算示例36
第3章 執行計畫40
31 概述40
311 什麼是執行計畫40
312 庫執行計畫存儲方式42
32 解讀執行計畫43
321 執行順序43
322 訪問路徑45
33 執行計畫操作45
331 查看執行計畫45
332 固定執行計畫72
333 修改執行計畫80
第4章 統計信息84
41 統計信息分類84
411 系統統計信息84
412 對象統計信息87
413 數據字典統計信息109
414 內部對象統計信息109
42 統計信息操作109
421 系統統計信息110
422 對象統計信息111
423 數據字典統計信息115
424 內部對象統計信息115
第5章 SQL解析與游標116
51 解析步驟116
52 解析過程117
53 游標示例119
第6章 綁定變數122
61 使用方法122
62 綁定變數與解析124
63 游標共享129
第7章 SQL最佳化相關對象131
71 表131
72 欄位137
73 索引140
74 視圖148
75 函式149
76 數據鏈(DB_LINK)150
第8章 SQL最佳化相關存儲結構153
81 表空間153
82 段154
83 區155
84 塊156
第9章 特有SQL160
91 MERGE160
92 INSERT ALL162
93 WITH162
94 CONNECT BY /START WITH163
第三部分 SQL篇
第10章 查詢轉換166
101 查詢轉換的分類及說明166
102 查詢轉換—子查詢類167
103 查詢轉換—視圖類174
104 查詢轉換—謂詞類178
105 查詢轉換—消除類180
106 查詢轉換—其他181
第11章 訪問路徑189
111 表訪問路徑189
1111 全表掃描189
1112 ROWID掃描193
1113 採樣掃描194
112 B樹索引訪問路徑195
113 點陣圖索引訪問路徑205
114 其他訪問路徑210
第12章 表間關聯215
121 關聯關係215
122 表關聯實現方法218
123 嵌套循環連線220
124 排序合併連線226
125 哈希連線232
126 其他連線方式238
第13章 半連線與反連線243
131 半連線243
132 反連線246
第14章 排序250
141 引發排序的操作250
142 避免和減少排序251
1421 最佳化原則及基本方法251
1422 避免排序的示例252
143 排序過程及記憶體使用255
144 執行計畫中的“Sort”258
第15章 子查詢262
151 處理方式262
152 子查詢分類263
1521 按照語法分類263
1522 按照謂詞分類263
1523 示例264
153 子查詢最佳化266
154 子查詢特殊問題272
1541 空值問題272
1542 OR問題274
1543 [NOT] IN/EXISTS問題275
第16章 並行276
161 並行操作276
1611 並行查詢277
1612 並行DML280
1613 並行DDL283
162 並行級別286
163 並行原理286
1631 從屬進程286
1632 粒度287
第四部分 實踐篇
第17章 資料庫設計開發規範292
171 Oracle結構設計規範292
1711 建模工具292
1712 命名規範294
1713 數據類型296
1714 表設計297
1715 欄位設計299
1716 約束設計299
1717 索引設計300
1718 視圖設計303
1719 包設計303
17110 範式與逆範式304
17111 其他設計問題305
172 Oracle開發規範306
1721 書寫規範306
1722 編碼規範307
1723 注釋規範307
1724 語法規範308
173 MySQL結構設計規範312
1731 命名規則313
1732 使用原則314
1733 規模規則315
1734 欄位規則315
1735 索引規則319
1736 字元集321
1737 逆範式設計321
174 MySQL開發規範322
1741 基本原則322
1742 語句規範322
第18章 架構設計之資料庫承載力評估327
181 評估工作327
1811 建立性能基線327
1812 建立業務壓力模型329
1813 模擬壓力測試331
182 最佳化步驟331
第19章 資料庫畫像335
191 你了解你的資料庫嗎335
192 畫像設計思路336
193 畫像報告解讀336
1931 概要信息336
1932 空間信息336
1933 對象信息337
1934 訪問特徵339
1935 資源消耗341
1936 SQL語句342
第20章 資料庫審核平台實踐:功能343
201 背景說明343
202 平台選型347
203 平台定位348
204 平台原理349
205 推進方法350
第21章 資料庫審核平台實踐:實現352
211 平台設計352
212 流程圖354
213 數據結構355
214 主要模組356
2141 數據採集356
2142 規則解析358
2143 系統管理364
215 審核結果展示366
第22章 資料庫審核平台實踐:規則370
作者簡介
馬立和 研究員級高工,哈爾濱學院教師。主要研究方向資料庫、圖形圖像處理。作為項目負責人及主要完成人先後參加黑龍江省科技攻關項目3項、國家863項目1項,黑龍江省自然基金1項、黑龍江省青年基金2項、哈爾濱市科技攻關項目1項等。獲黑龍江省科技進步二等獎一項、三等獎一項;發表論文十餘篇,發明專利1項。主持參加《哈爾濱第24界世界大學生冬季運動會賽事信息系統》、《星級酒店信息管理系統》、《母豬自動飼餵系統》等20餘項橫向課題。
高振嬌 現任職於 PingCAP ,擔任 TiDB 技術支持工程師。早前任職宜信,相繼擔任資料庫管理員,以及資料庫組負責人職位。對金融行業的資料庫具有豐富的運維管理經驗。熟悉傳統關係型資料庫 Oracle 、MySQL,對NoSQL 以及 NewSQL 具有濃厚的興趣。同時對自動化運維也有較為深刻的理解,是 Themis 開源資料庫審核平台的核心成員。
韓鋒 CCIA(中國計算機協會)常務理事,Oracle ACE,騰訊雲TVP,dbaplus等多家社群創始人或專家團成員。有多年一線資料庫架構、軟體研發、產品設計、團隊管理經驗。現就職於阿里雲,之前曾就職於宜信等公司。在雲、電商、金融、網際網路等行業均有涉獵。精通多種關係型資料庫,對NoSQL及大數據相關技術也有涉足,實踐經驗豐富。之前曾著有《SQL最佳化最佳實踐》一書。