目 錄ide
三. 常見不合理的語句.........................................................100函數
3.1). 沒有使用綁定變量....................................................100工具
3.2). 隱含轉換............................................................101優化
3.3). 索引列上進行運算....................................................102spa
3.4). SELECT中使用 *......................................................103設計
3.5). SQL中調用序列、函數的問題...........................................1043d
3.6). 聚合操做取了不須要的列,列又做了轉換或排序操做......................105blog
3.7). SQL語句沒法共享.....................................................107排序
3.8). 表名書寫順序的問題..................................................108索引
3.9). SQL中大小寫混寫.....................................................110
3.10). 表的別名...........................................................110
3.11). 表的關聯字段設計不合理的問題.......................................112
3.12). 沒有使用 ORACLE提供的高效函數......................................112
3.13). 減小表的訪問次數的問題.............................................114
3.14). 減小數據的查找範圍.................................................115
3.15). 多此一舉的寫法.....................................................116
3.16). 子程序缺乏異常處理部分.............................................118
3.17). 子程序處理邏輯不明確,沒有使用直接賦值,且無異常處理...............119
四. SQL優化寫法..............................................................121
4.1). INSERT語句的優化....................................................121
4.1.1). 逐條插入改成批處理插入....................................121
4.1.2). INSERT ... INTO ... SELECT ... FROM 的優化..............123
4.2). DELECT 語句的代化...................................................124
4.2.1). 單表刪除..................................................126
4.2.2). 多表關聯刪除..............................................126
4.3). UPDATE 語句的優化...................................................128
4.3.1). 單表更新優化..............................................128
4.3.2). 多表關聯更新優化..........................................129
4.4). SELECT 語句的優化...................................................130
4.4.1). DISTINCT 的優化案例.......................................131
4.4.2). 0R的優化案例..............................................132
4.4.3). EXISTS的優化案例..........................................136
4.4.4). 0R和EXISTS的混合優化案例..................................137
4.4.5). MERGE INTO沒有使用索引的案例..............................138
4.4.6). 25個 UNION語句的優........................................140
4.4.7). 善於使用 ORACLE函數的案例.................................143
4.4.8). 消除重複過濾條件的案例....................................145
4.4.9). 減小中間結果集的反案例....................................147
4.4.10). 增長冗餘字段使用索引的案例...............................148
4.4.11). 減小表的掃描次數的案例...................................149
4.4.12). 使用 ROWID 優化的案例....................................151
4.4.13). ORDER BY 的優化案例......................................151
4.4.14). 使用隱含提示的優化案例...................................152
五. 分析、監控和調優.........................................................157
5.1). 如何肯定那些語句須要優化............................................157
5.1.1). 查詢 V$SQL,V$SQLAREA等視圖...............................157
5.1.2). 查看 ORACLE的自動調優任務.................................158
5.2). 如何查看執行計劃....................................................160
5.2.1). 在 PL/SQL工具中按 EXPLAIN PLAN 按鈕或者F5查看執行計劃.....160
5.2.2). 使用 EXPLAIN PLAN 語句查看執行計劃........................160
5.2.3). 在CMD窗口或 SHEEL中使用SET AUTOTRACE TRACEONLY查看........161
5.2.4). 如何分析執行計劃..........................................162
5.3). 如何肯定優化點......................................................166
5.4). 如何使用自動優化建議................................................167
5.4.1). 使用DBMS_SQLTUNE建立調優任務..............................167
5.4.2). 經過SQL_ID創調優任務......................................169
5.4.3). 經過DBA_ADVISOR_ACTIONS視圖查看優化建議...................171
5.5). 如何使用SQL_TRACE和10046事件進行優化................................172
5.5.1). 使用SQL_TRACE進行優化.....................................172
5.5.2). 使用10046事件進行優化.....................................174
5.6). 如何收集統計信息....................................................176
5.7). 如何監控索引........................................................178
六. 補充部分(報表開發神器)...................................................180
6.1). 分析函數............................................................180
a). RANK() / DENSE_RANK()函數.....................................181
b). 開窗函數(windowing functions)...............................182
c). 製表函數(reporting functions)...............................183
d). LAG / LEAD函數 ...............................................184
e). FIRST / LAST函數..............................................185
f). LISTAGG 高級分析函數..........................................186
6.2). 行列轉換..........................................................187
6.2.1). PIVOT列轉爲行...........................................187
6.2.2). UNPIVOT 行轉爲列........................................190
6.3). SQL 模型子句(SQL MODELING)........................................192
6.3.1). 簡介....................................................192
6.3.2). 單個單元格引用(SINGLE CELL REFERENCES)..................193
6.3.3). 位置引用(POSITIONAL REFERENCES).........................194
6.3.4). 位置引用,既更新現有單元格,又建立新單元格..............195
6.3.5). 多單元格引用(MULTI-CELL REFERENCES).....................196
6.3.6). 使用CV函數..............................................197
6.3.7). 使用F0R循環.............................................198
6.3.8). 使用ANY通配符...........................................199