Oracle查詢優(yōu)化改寫技巧與案例2.0
定 價(jià):79 元
- 作者:有教無類
- 出版時(shí)間:2018/6/1
- ISBN:9787121341410
- 出 版 社:電子工業(yè)出版社
- 中圖法分類:TP311.138
- 頁碼:368
- 紙張:
- 版次:01
- 開本:16開
本書不講具體語法,只是以案例的形式介紹各種查詢語句的用法。第1~4章是基礎(chǔ)部分,講述了常用的各種基礎(chǔ)語句,以及常見的錯誤和正確語句的寫法,應(yīng)熟練掌握這部分內(nèi)容,因?yàn)樵谌粘2樵兒蛢?yōu)化改寫中都要用到;第5~12章是提高部分,講解了正則表達(dá)式、分析函數(shù)、樹形查詢及匯總函數(shù)的用法,這部分內(nèi)容常用于一些復(fù)雜需求的實(shí)現(xiàn)及優(yōu)化改寫;最后兩章介紹日常的優(yōu)化改寫案例,這部分內(nèi)容是前面所學(xué)知識的擴(kuò)展應(yīng)用。如果您是開發(fā)人員,經(jīng)常與Oracle打交道,那么本書可以幫助您處理復(fù)雜的需求,寫出高性能的語句。如果您是運(yùn)維人員,則本書可以幫助您更快地完成慢語句的改寫優(yōu)化。
師慶棟,網(wǎng)名有教無類。SWOUG(西南Oracle用戶組)成員,資深Oracle開發(fā)DBA,道森培訓(xùn)高級講師。擁有超過13年的IT從業(yè)經(jīng)驗(yàn),擅長Oracle數(shù)據(jù)庫開發(fā),對于數(shù)據(jù)庫架構(gòu)設(shè)計(jì)、性能優(yōu)化擁有豐富的實(shí)戰(zhàn)經(jīng)驗(yàn)!通過大量的報(bào)表優(yōu)化改寫,積累了豐富的優(yōu)化改寫經(jīng)驗(yàn),擅長對Oracle查詢語句的優(yōu)化改寫。羅炳森,網(wǎng)名落落。擅長SQL優(yōu)化,對Oracle優(yōu)化器有較深的理解。從2007年至今一直專注于SQL優(yōu)化、表設(shè)計(jì)優(yōu)化、SQL查詢改寫。經(jīng)常熱心幫助網(wǎng)友解決SQL性能問題,累計(jì)SQL優(yōu)化案例上千個(gè)。
目錄
第1章 單表查詢 1
1.1 查詢表中所有的行與列 1
1.2 從表中檢索部分行 2
1.3 查找空值 3
1.4 空值與運(yùn)算 3
1.5 處理空值 4
1.6 空值與函數(shù) 5
1.7 查找滿足多個(gè)條件的行 6
1.8 從表中檢索部分列 7
1.9 為列取有意義的名稱 7
1.10 在WHERE子句中引用取別名的列 8
1.11 拼接列 8
1.12 在SELECT語句中使用條件邏輯 9
1.13 限制返回的行數(shù) 11
第2章 給查詢結(jié)果排序 12
2.1 以指定的次序返回查詢結(jié)果 12
2.2 按多個(gè)字段排序 14
2.3 按子串排序 15
2.4 從表中隨機(jī)返回n條記錄 16
2.5 TRANSLATE 18
2.6 按數(shù)字和字母混合字符串中的字母排序 19
2.7 處理排序空值 20
2.8 根據(jù)條件取不同列中的值來排序 21
第3章 操作多個(gè)表 23
3.1 UNION ALL與空字符串 23
3.2 UNION與OR 24
3.3 UNION與去重 26
3.4 組合相關(guān)的行 30
3.5 IN、EXISTS和INNER JOIN 30
3.6 INNER JOIN、LEFT JOIN、RIGHT JOIN和FULL JOIN解析 32
3.7 外連接與過濾條件 36
3.8 自關(guān)聯(lián) 39
3.9 NOT IN、NOT EXISTS和LEFT JOIN 40
3.10 檢測兩個(gè)表中的數(shù)據(jù)及對應(yīng)數(shù)據(jù)的條數(shù)是否相同 43
3.11 聚集與內(nèi)連接 44
第4章 插入、更新與刪除 49
4.1 插入新記錄 49
4.2 阻止對某幾列插入 50
4.3 復(fù)制表的定義及數(shù)據(jù) 51
4.4 用WITH CHECK OPTION限制數(shù)據(jù)錄入 51
4.5 多表插入語句 52
4.6 用其他表中的值更新 56
4.7 合并記錄 62
4.8 刪除違反參照完整性的記錄 64
4.9 刪除名稱重復(fù)的記錄 64
第5章 使用字符串 67
5.1 生成連續(xù)數(shù)值 67
5.2 遍歷字符串 68
5.3 計(jì)算字符在字符串中出現(xiàn)的次數(shù) 69
5.4 從字符串中刪除不需要的字符 71
5.5 將字符和數(shù)字?jǐn)?shù)據(jù)分離 72
5.6 查詢只包含字母或數(shù)字型的數(shù)據(jù) 73
5.7 提取姓名的大寫首字母縮寫 78
5.8 根據(jù)表中的行創(chuàng)建一個(gè)分隔列表 79
5.9 提取第n個(gè)分隔的子串 80
5.10 分解IP地址 82
5.11 將分隔數(shù)據(jù)轉(zhuǎn)換為多值IN列表 82
5.12 組合去重 83
第6章 使用數(shù)字 86
6.1 常用聚集函數(shù) 86
6.2 列轉(zhuǎn)行 88
6.3 行轉(zhuǎn)列 89
6.4 生成累計(jì)和 91
6.5 累計(jì)與重復(fù)值 95
6.6 生成排名 97
6.7 返回最值對應(yīng)信息 98
6.8 求總和的百分比 99
第7章 日期運(yùn)算 103
7.1 日期類型 103
7.2 日期計(jì)算 105
7.3 時(shí)間間隔類型 105
7.4 日期計(jì)算函數(shù) 106
7.5 間隔月份 108
7.6 獲取記錄間的間隔時(shí)間 108
第8章 日期操作 112
8.1 提取日期中的信息 112
8.2 提取間隔類型中的信息 115
8.3 周的計(jì)算 117
8.4 計(jì)算一年中周內(nèi)各日期的次數(shù) 119
8.5 確定一年是否為閏年 123
8.6 創(chuàng)建本月日歷 123
8.7 全年日歷 126
8.8 補(bǔ)充范圍內(nèi)丟失的值 129
8.9 識別重疊的日期范圍 131
第9章 范圍處理 134
9.1 定位連續(xù)值的范圍 134
9.2 合并連續(xù)區(qū)間 136
9.3 合并重疊區(qū)間 140
9.4 用WITH進(jìn)行范圍分組 143
第10章 高級查找 147
10.1 給結(jié)果集分頁 147
10.2 使用管道函數(shù)把全表查詢改為增量查詢 149
10.3 內(nèi)聯(lián)視圖與錯誤數(shù)據(jù) 153
10.4 正確使用分析函數(shù) 155
10.5 找到包含最大值和最小值的記錄 157
10.6 提取維度信息 159
第11章 報(bào)表和數(shù)據(jù)倉庫運(yùn)算 162
11.1 行轉(zhuǎn)列子句 162
11.2 列轉(zhuǎn)行子句 165
11.3 將結(jié)果集反向轉(zhuǎn)置為一列 168
11.4 打印小票與行列轉(zhuǎn)換 169
11.5 數(shù)據(jù)分組 172
11.6 計(jì)算簡單的小計(jì) 173
11.7 判別非小計(jì)的行 175
11.8 對不同組/分區(qū)同時(shí)實(shí)現(xiàn)聚集 177
11.9 移動范圍取值分析 179
11.10 計(jì)算本期、新增、累加 182
11.11 listagg與小九九 186
第12章 分層查詢 188
12.1 簡單的樹形查詢 188
12.2 根節(jié)點(diǎn)、分支節(jié)點(diǎn)、葉子節(jié)點(diǎn) 190
12.3 sys_connect_by_path 191
12.4 樹形查詢中的排序 192
12.5 樹形查詢中的WHERE 193
12.6 查詢樹形的一個(gè)分支 195
12.7 剪去一個(gè)分支 196
12.8 多行字符串的拆分 196
第13章 應(yīng)用案例實(shí)現(xiàn) 199
13.1 解析簡單公式 199
13.2 匹配漢字 200
13.3 多表全外連接的問題 202
13.4 根據(jù)傳入條件返回不同列中的數(shù)據(jù) 203
13.5 拆分字符串進(jìn)行連接 205
13.6 用“行轉(zhuǎn)列”來得到隱含信息 206
13.7 用隱藏?cái)?shù)據(jù)進(jìn)行行轉(zhuǎn)列 208
13.8 用正則表達(dá)式提取clob里的文本格式記錄集 210
第14章 改寫調(diào)優(yōu)案例分享 212
14.1 為什么不建議使用標(biāo)量子查詢 212
14.2 用LEFT JOIN優(yōu)化標(biāo)量子查詢 215
14.3 用LEFT JOIN優(yōu)化標(biāo)量子查詢之聚合改寫 216
14.4 用LEFT JOIN及行轉(zhuǎn)列優(yōu)化標(biāo)量子查詢 217
14.5 標(biāo)量中有ROWNUM=1 218
14.6 ROWNUM=1引起的邏輯問題 219
14.7 標(biāo)量中有不等關(guān)聯(lián)時(shí)改寫的問題 222
14.8 標(biāo)量中有聚合函數(shù)時(shí)改寫的問題 226
14.9 用分析函數(shù)優(yōu)化標(biāo)量子查詢(一) 229
14.10 用分析函數(shù)優(yōu)化標(biāo)量子查詢(二) 231
14.11 用分析函數(shù)優(yōu)化標(biāo)量子查詢(三) 233
14.12 標(biāo)量中的樹形查詢 235
14.13 使用標(biāo)量子查詢優(yōu)化取最值語句 238
14.14 用MERGE改寫優(yōu)化UPDATE 240
14.15 UPDATE中有ROWNUM=1 243
14.16 用MERGE使用左聯(lián) 245
14.17 用MERGE改寫UPDATE之多個(gè)子查詢 249
14.18 將UPDATE改寫為MERGE時(shí)遇到的問題 251
14.19 通過分頁方式優(yōu)化最值語句 254
14.20 讓分頁語句走正確的PLAN 256
14.21 去掉分頁查詢中的DISTINCT 257
14.22 優(yōu)化有GROUP BY的分頁語句 261
14.23 用WITH語句優(yōu)化查詢 264
14.24 用WITH輔助把OR改為UNION 265
14.25 錯誤的WITH改寫 269
14.26 錯誤的分析函數(shù)用法 272
14.27 用LEFT JOIN優(yōu)化多個(gè)子查詢(一) 274
14.28 用LEFT JOIN優(yōu)化多個(gè)子查詢(二) 278
14.29 用LEFT JOIN優(yōu)化多個(gè)子查詢(三) 280
14.30 去掉由EXISTS引起的FILTER 283
14.31 巧改驅(qū)動表提升效率 284
14.32 用分析函數(shù)更改反連接 286
14.33 集合判斷 288
14.34 相等集合判斷 289
14.35 用分析函數(shù)改寫最值過濾條件 291
14.36 用樹形查詢找指定級別的數(shù)據(jù) 292
14.37 行轉(zhuǎn)列與列轉(zhuǎn)行 293
14.38 UPDATE、ROW_NUMBER與MERGE 295
14.39 一個(gè)UPDATE語句的優(yōu)化 298
14.40 自定義函數(shù)對速度的影響 302
14.41 糾結(jié)的MERGE語句 305
14.42 用CASE WHEN去掉UNION ALL 308
14.43 不恰當(dāng)?shù)腤ITH及標(biāo)量子查詢 320
14.44 用分析函數(shù)加“行轉(zhuǎn)列”來優(yōu)化標(biāo)量子查詢 323
14.45 用分析函數(shù)處理問題 326
14.46 用列轉(zhuǎn)行改寫A表多列關(guān)聯(lián)B表同列 329
14.47 用分析函數(shù)改寫最值語句 332
14.48 多列關(guān)聯(lián)的半連接與索引 334
14.49 巧用分析函數(shù)優(yōu)化自關(guān)聯(lián) 335
14.50 糾結(jié)的UPDATE語句 340
14.51 巧用JOIN條件合并UNION ALL語句 342
14.52 用分析函數(shù)去掉NOT IN 345
14.53 讀懂查詢中的需求之裁剪語句 349
14.54 去掉FILTER里的EXISTS之活學(xué)活用 350