《收穫,不止SQL最佳化》一書全稱《收穫,不止SQL最佳化——抓住SQL的本質》,作者梁敬彬、梁敬弘,電子工業出版社2017年6月出版
基本介紹
- 書名:收穫,不止SQL最佳化——抓住SQL的本質
- 作者:梁敬彬 梁敬弘
- ISBN:978-7-121-31436-0
- 頁數:488
- 定價:88.00
- 出版社:電子工業出版社
- 出版時間:2017年6月
- 開本:16
內容提要,目錄,
內容提要
有人就有江湖,有江湖就有IT系統,有IT系統就有資料庫,有資料庫就有SQL,SQL套用可一字概括:“廣”。加之其簡單易學,SQL實現也可一字概括:“樂”。
然而,SQL雖然實現簡單可樂,卻極易引發性能問題,那時廣大SQL使用人員可要“愁”就一個字,心碎無數次了。
緣何有性能問題?原因也一字概括:“量”。當系統數據量、並發訪問量上去後,不良SQL就會拖跨整個系統,我們甚至找不出哪些SQL影響了系統。即便找到也不知如何動手最佳化。此時的心情也可以一字概括:“懵”。
現在《收穫,不止SQL最佳化——抓住SQL的本質》開始帶你拋除煩惱,走進最佳化的可樂世界!
首先教你SQL整體最佳化、快速最佳化實施、如何讀懂執行計畫、如何左右執行計畫這四大必殺招。整這些幹嘛呢?答案是,傳授一個先整體後局部的巨觀解決思路,走進“道”的世界。
接下來帶領大家飛翔在“術”的天空。教你體系結構、邏輯結構、表設計、索引設計、表連線這五大要領。這么多套路,這又是要幹嘛?別急,這是教你如何解決問題,準確地說,是如何不改寫即完成SQL最佳化。
隨後《收穫,不止SQL最佳化——抓住SQL的本質》指引大家學會等價改寫、過程包最佳化、高級SQL、分析函式、需求最佳化這些相關的五大神功。有點頭暈,能否少一點套路?淡定,這還是“術”的範疇,依然是教你如何解決問題,只不過這次是如何改寫SQL完成最佳化。
最後一個章節沒套路了,其中跟隨你多年的錯誤認識是否讓你懷疑人生,其中讓SQL跑得更慢的觀點,是否讓你三觀盡毀?
再多一點真誠吧,《收穫,不止SQL最佳化——抓住SQL的本質》提供掃二維碼輔助學習,是不是心被筆者給暖到了?
讀完全書,來,合上書本,閉上眼睛,深呼吸,用心來感受SQL最佳化的世界。
一個字:“爽”!
目錄
第1章 全局在胸——用工具對SQL整體最佳化 1
1.1 都有哪些性能工具 1
1.1.1 不同調優場景分析 2
1.1.2 不同場景對應工具 2
1.2 整體性能工具的要點 4
1.2.1 五大性能報告的獲取 5
1.2.2 五大報告關注的要點 10
1.3 案例的分享與交流 18
1.3.1 和並行等待有關的案例 18
1.3.2 和熱塊競爭有關的案例 19
1.3.3 和日誌等待有關的案例 20
1.3.4 新疆某系統的前台最佳化 20
1.3.5 浙江某系統的調優案例 21
1.4 本章總結延伸與習題 21
1.4.1 總結延伸 21
1.4.2 習題訓練 23
第2章 風馳電掣——有效縮短SQL最佳化過程 24
2.1 SQL調優時間都去哪兒了 25
2.1.1 不善於批處理頻頻忙互動 25
2.1.2 無法抓住主要矛盾瞎折騰 25
2.1.3 未能明確需求目標白費勁 26
2.1.4 沒有分析操作難度亂調優 26
2.2 如何縮短SQL調優時間 27
2.2.1 先獲取有助調優的資料庫整體信息 27
2.2.2 快速獲取SQL運行台前信息 27
2.2.3 快速拿到SQL關聯幕後信息 28
2.3 從案例看快速SQL調優 29
2.3.1 獲取資料庫整體的運行情況 29
2.3.2 獲取SQL的各種詳細信息 29
2.4 本章總結延伸與習題 32
2.4.1 總結延伸 32
2.4.2 習題訓練 33
第3章 循規蹈矩——如何讀懂SQL執行計畫 34
3.1 執行計畫分析概述 35
3.1.1 SQL執行計畫是什麼 35
3.1.2 統計信息用來做什麼 36
3.1.3 資料庫統計信息的收集 37
3.1.4 資料庫的動態採樣 37
3.1.5 獲取執行計畫的方法(6種武器) 40
3.2 讀懂執行計畫的關鍵 48
3.2.1 解釋經典執行計畫方法 49
3.2.2 總結說明 55
3.3 從案例辨別低效SQL 55
3.3.1 從執行計畫讀出效率 56
3.3.2 執行計畫效率總結 60
3.4 本章習題、總結與延伸 60
第4章 運籌帷幄——左右SQL執行計畫妙招 62
4.1 控制執行計畫的方法綜述 63
4.1.1 控制執行計畫的意義 63
4.1.2 控制執行計畫的思路 64
4.2 從案例探索其方法及意義 65
4.2.1 HINT的思路 65
4.2.2 非HINT方式的執行計畫改變 72
4.2.3 執行計畫的固定 100
4.3 本章習題、總結與延伸 102
第5章 且慢,感受體系結構讓SQL飛 103
5.1 體系結構知識 104
5.1.1 組成 104
5.1.2 原理 104
5.1.3 體會 105
5.2 體系與SQL最佳化 106
5.2.1 與共享池相關 107
5.2.2 數據緩衝相關 111
5.2.3 日誌歸檔相關 116
5.3 擴展最佳化案例 118
5.3.1 與共享池相關 118
5.3.2 數據緩衝相關 122
5.3.3 日誌歸檔相關 126
5.4 本章習題、總結與延伸 130
第6章 且慢,體驗邏輯結構讓SQL飛 132
6.1 邏輯結構 132
6.2 體系細節與SQL最佳化 133
6.2.1 Block 133
6.2.2 Segment與extent 137
6.2.3 Tablespace 139
6.2.4 rowid 139
6.3 相關最佳化案例分析 140
6.3.1 塊的相關案例 141
6.3.2 段的相關案例 144
6.3.3 表空間的案例 148
6.3.4 rowid 151
6.4 本章習題、總結與延伸 153
第7章 且慢,探尋表的設計讓SQL飛 154
7.1 表設計 154
7.1.1 表的設計 155
7.1.2 其他補充 155
7.2 表設計與SQL最佳化 156
7.2.1 表的設計 156
7.2.2 其他補充 179
7.3 相關最佳化案例分析 184
7.3.1 分區表相關案例 185
7.3.2 全局臨時表案例 190
7.3.3 監控異常的表設計 195
7.3.4 表設計最佳化相關案例總結 199
7.4 本章習題、總結與延伸 199
第8章 且慢,學習索引如何讓SQL飛 200
8.1 索引知識要點概述 201
8.1.1 索引結構的推理 201
8.1.2 索引特性的提煉 204
8.2 索引的SQL最佳化 206
8.2.1 經典三大特性 207
8.2.2 組合索引選用 217
8.2.3 索引掃描類型的分類與構造 219
8.3 索引相關最佳化案例 225
8.3.1 三大特性的相關案例 225
8.3.2 組合索引的經典案例 231
8.4 本章習題、總結與延伸 234
第9章 且慢,弄清索引之阻礙讓SQL飛 235
9.1 索引的不足之處 235
9.1.1 索引的各種開銷 236
9.1.2 索引使用失效 236
9.2 感受美好索引另一面 237
9.2.1 索引各種開銷 237
9.2.2 索引使用失效 243
9.2.3 索引取捨控制 246
9.3 從案例看索引各種恨 248
9.3.1 索引的開銷 248
9.3.2 索引去哪兒了 253
9.3.3 索引的取捨 267
9.4 本章習題、總結與延伸 269
第10章 且慢,其他索引套用讓SQL飛 270
10.1 其他索引的總體概述 270
10.1.1 點陣圖索引 271
10.1.2 函式索引 271
10.1.3 反向鍵索引 272
10.1.4 全文索引 272
10.2 走進其他索引的世界 272
10.2.1 點陣圖索引 273
10.2.2 函式索引 278
10.2.3 反向鍵索引 282
10.2.4 全文索引 282
10.3 其他索引的相關案例 285
10.3.1 點陣圖索引 286
10.3.2 函式索引 288
10.3.3 反向鍵索引 297
10.3.4 全文索引 299
10.4 本章習題、總結與延伸 300
第11章 且慢,表連線的秘密讓SQL飛 302
11.1 三大經典表連線概要說明 302
11.2 各類型表連線的知識要點 303
11.2.1 從表的訪問次數探索 304
11.2.2 表驅動順序與性能 308
11.2.3 表連線是否有排序 311
11.2.4 各連線的使用限制 314
11.2.5 三大表連線的特性總結 317
11.3 從案例學表連線最佳化要點 (三刀三斧四式走天下) 317
11.3.1 一次Nested Loops Join的最佳化全過程 318
11.3.2 一次Hash Join 的 最佳化全過程 320
11.3.3 一次 Merge Sort Join 的最佳化全過程 324
11.3.4 一次統計信息收集不準確引發的NL性能瓶頸 329
11.4 本章習題、總結與延伸 332
第12章 動手,經典等價改寫讓SQL飛 333
12.1 設法減少訪問路徑 333
12.1.1 Case When改造 334
12.1.2 Rownum分頁改寫 337
12.1.3 Hint直接路徑改造 338
12.1.4 只取你所需的列 339
12.1.5 避免或者減少遞歸調用 341
12.1.6 ROWID最佳化套用 347
12.2 設法避免外因影響 350
12.2.1 Hint改寫確保執行計畫正確 350
12.2.2 避免子查詢的錯誤執行計畫 350
12.2.3 所在環境的資源不足等問題 351
12.3 本章習題、總結與延伸 351
第13章 動手,過程函式最佳化讓SQL飛 352
13.1 PL/SQL最佳化重點 353
13.1.1 定義類型的最佳化 353
13.1.2 PL/SQL的集合最佳化 355
13.1.3 PL/SQL的游標合併 361
13.1.4 動態SQL 364
13.1.5 使用10046 trace跟蹤PL/SQL 368
13.2 PL/SQL最佳化其他相關擴展 369
13.2.1 編譯無法成功 369
13.2.2 通用腳本分享 370
13.3 本章習題、總結與延伸 380
第14章 動手,高級寫法套用讓SQL飛 381
14.1 具體SQL調優思路 381
14.1.1 改寫SQL調優 382
14.1.2 不改寫SQL調優 382
14.2 高級SQL介紹與案例 383
14.2.1 GOURP BY的擴展 383
14.2.2 INSERT ALL 389
14.2.3 MERGE 392
14.2.4 WITH子句 402
14.3 本章習題、總結與延伸 404
第15章 動手,分析函式讓SQL飛 406
15.1 高級SQL之分析函式 407
15.1.1 語法概述 407
15.1.2 特別之處 407
15.2 分析函式詳解與案例 409
15.2.1 學習詳解 410
15.2.2 案例分享 417
15.3 本章習題、總結與延伸 432
第16章 動手,把握需求改寫讓SQL飛 433
16.1 考慮需求最小化 434
16.2 千萬弄清SQL改造的等價性 434
16.2.1 看似等價的寫法,其實不等價 435
16.2.2 看似不等價的寫法,其實等價 438
16.3 開發設計套用中的需求 439
16.3.1 界面許可權設計最佳化 439
16.3.2 界面匯總與展現 439
16.3.3 界面實時刷新改良 439
16.3.4 目錄樹選單的最佳化 440
16.4 場景選擇的經典案例之誰是Count(*)之王 440
16.4.1 最佳化過程 440
16.4.2 最佳化總結 445
16.5 本章習題、總結與延伸 446
第17章 總結與延伸:從勿信訛傳到洞若觀火 447
17.1 SQL最佳化的各個誤區 447
17.1.1 COUNT(*)與COUNT(列)的傳言 447
17.1.2 談SQL編寫順序之流言蜚語 451
17.1.3 IN與EXISTS之爭 455
17.1.4 總結探討 457
17.2 誤區背後的話題擴展 457
17.2.1 話題擴展之等價與否優先 457
17.2.2 話題擴展之顛覆誤區觀點 458
17.3 全書完,致讀者 461