目 录
三. 常见不合理的语句.........................................................100
3.1). 没有使用绑定变量....................................................100
3.2). 隐含转换............................................................101
3.3). 索引列上进行运算....................................................102
3.4). SELECT中使用 *......................................................103
3.5). SQL中调用序列、函数的问题...........................................104
3.6). 聚合操作取了不需要的列,列又作了转换或排序操作......................105
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