本书由Oracle公司授权,向读者详尽阐述如何调整SQL语句、查看内部执行计划和更改执行计划以提高语句性能。主要内容包括:理解SQL调整在Oracle总体微调中地地位,使用诸如内嵌视图和BIF扩展提高Oracle SQL性能,确定并报告程序库缓存中的SQL语句,调整SQL表访问、完整表扫描和平行查询,运行TKPROF获得SQL跟踪报告,使用Oracle线索为Oracle SQL语句更改执行计划,使用Oracle8i优化器计划稳定性、基于成本的优化器和基于规则的优化器,调整SQL DML语句、SQL子查询和数据仓库SQL,调整带有临时表和索引的SQL语句,使用STATSPACK诊断和优化系统性能。\r\n
前言\r\n\r\n第一部分 背景知识\r\n\r\n第1章 SQL简介\r\n\r\n1.1 SQL的基本特征\r\n1.2 SQL起源\r\n1.2.1 SQL模型\r\n1.2.2 select操作\r\n1.2.3 project操作\r\n1.2.4 join操作\r\n1.3 SQL优化器\r\n1.4 SQL调整的目标\r\n1.5 作为Oracle调整步骤之一的SQL调整\r\n1.6 SQL调整的障碍\r\n1.7 SQL调整过程\r\n1.7.1 定位使用频繁的SQL语句\r\n1.7.2 调整SQL语句\r\n1.7.3 调整持久化\r\n1.8 SQL调整的目标\r\n1.9 SQL调整工具箱\r\n1.10 结论\r\n\r\n第2章 OracleSQL扩展简介\r\n\r\n2.1 Oracle内部视图\r\n2.2 Oracle内置函数\r\n2.3 Oracle和面向对象扩展\r\n2.4 挑战关系原则--重复数据项列表\r\n2.4.1 varray表\r\n2.4.2 表嵌套\r\n2.4.3 SQL对象扩展的性能\r\n2.5 结论\r\n\r\n第3章 理解SQL执行\r\n\r\n3.1 解析SQL语句\r\n3.1.1 重新书写查询\r\n3.1.2 在Oracle8i和Oracle9i中使用cursor_sharing\r\n3.1.3 减少SQL解析的技术\r\n3.2 生成执行计划\r\n3.2.1 表访问方式\r\n3.2.2 索引访问方式\r\n3.2.3 连接操作\r\n3.3 对SQL结果集进行排序\r\n3.4 结论\r\n\r\n第4章 SQL优化器简介\r\n\r\n4.1 基本的优化器技术\r\n4.1.1 基于规则的优化器\r\n4.1.2 基于成本的优化器\r\n4.2 优化器模式\r\n4.2.1 rule模式\r\n4.2.2 choose模式\r\n4.2.3 first_rows模式\r\n4.2.4 all_rows模式\r\n4.2.5 更快的执行速度与最小的资源消耗\r\n4.3 基于规则优化的调整\r\n4.3.1 更改基于规则的驱动表\r\n4.3.2 如果基于规则的优化器没有使用正确的索引\r\n4.4 基于成本优化的调整\r\n4.4.1 调用基于成本的优化器\r\n4.4.2 为CBO收集统计资料\r\n4.5 决定默认优化器模式\r\n4.6 迁移到基于成本的优化器\r\n4.6.1 对开发人员进行重新培训\r\n4.6.2 选择基于成本的优化器的思想\r\n4.7 结论\r\n\r\n第5章 SQL内部处理\r\n\r\n5.1 共享SQL区域和专用SQL区域\r\n5.2 SQL的SGA统计资料\r\n5.3 程序库缓存的内部情况\r\n5.3.1 程序库缓存中可以多次使用的SQL\r\n5.3.2 监控程序库缓存不足率\r\n5.3.3 使用STATSPACK监控程序库缓存中的对象\r\n5.3.4 程序库缓存的STATSPACK报告\r\n5.4 调整OracleSQL排序\r\n5.5 确定程序库缓存中具有高影响力的SQL语句\r\n5.6 关于程序库缓存中SQL的报告\r\n5.6.1 使用带有STATSPACK的access.sql脚本\r\n5.6.2 access.sql报告\r\n5.6.3 全表扫描报告\r\n5.6.4 索引范围扫描报告\r\n5.6.5 索引惟一性扫描报告\r\n5.6.6 完全索引扫描报告\r\n5.6.7 access.sql报告的局限性\r\n5.7 结论\r\n\r\n第6章 调整SQL表访问\r\n\r\n6.1 SQL调整和全表扫描\r\n6.1.1 决定全表扫描的闽值\r\n6.1.2 查找全表扫描\r\n6.1.3 优化器如何选择全表扫描\r\n6.1.4 当CBO选择了错误的全表扫描\r\n6.1.5 预防不必要的全表扫描\r\n6.2 借助于索引的表访问\r\n6.3 更改表访问方式\r\n6.3.1 将索引由惟一索引更改为非惟一索引\r\n6.3.2 重新书写SQL语句以更改表访问方法\r\n6.4 重新排序表记录以减少输入输出\r\n6.4.1 使用索引簇重新排序记录\r\n6.4.2 使用CTAS重新排序记录\r\n6.5 Oracle存储参数和表访问性能\r\n6.5.1 pctfree存储参数\r\n6.5.2 pctused存储参数\r\n6.5.3 freelists存储参数\r\n6.5.4 OPS的freelistgroups存储参数\r\n6.5.5 存储参数规则总结\r\n6.6 空闲列表管理和表访问性能\r\n6.6.1 空闲列表的链接和取消链接\r\n6.6.2 减少空闲列表的重新锭接\r\n6.7 结论\r\n\r\n第二部分 SQL调整基础\r\n\r\n第7章 OracleSQL调整的过程\r\n\r\n7.1 SQL调整的目标\r\n7.2 SQL调整步骤\r\n7.3 第一步:确定具有高影响力的SQL语句\r\n7.3.1 SQL语句分级\r\n7.3.2 确定使用频繁的SQL语句\r\n7.3.3 使用STATSPACK指定具有高影响力的SQL\r\n7.3.4 来自程序库缓存的SQL报告\r\n7.3.5 使用第三方工具定位有问题的SQL\r\n7.4 第二步:抽取和解释SQL语句\r\n7.5 第三步:调整SQL语句\r\n7.6 SQL调整实例\r\n7.7 使用第三方工具快速进行SQL调整\r\n7.8 结论\r\n\r\n第8章 理解OracleSQL工具\r\n\r\n8.1 解释SQL语句\r\n8.2 运行快速SQL跟踪\r\n8.3 TKPROF工具\r\n8.3.1 为SQL跟踪设置环境\r\n8.3.2 生成SQL跟踪文件\r\n8.3.3 格式化跟踪文件\r\n8.3.4 TKPRCOF报告\r\n8.4 Oracle专家中心SQL分析报告\r\n8.5 有关程序库缓存中所有SQL的报告\r\n8.5.1 使用带有STATSPACK的access.sql脚本\r\n8.5.2 access.sql报告\r\n8.6 结论\r\n\r\n第9章 定位重要的SQL语句\r\n\r\n9.1 建立实例范围的SQL基线\r\n9.1.1 设置默认的Optinizer_Mode\r\n9.1.2 默认优化器模式持久化\r\n9.1.3 提高全表扫描速度的实例范围参数\r\n9.1.4 其他影响SQL执行的初始化参数\r\n9.1.5 运行SQL基线测试\r\n9.2 什么是重要的SQL语句\r\n9.3 抽取需要调整的重要SQL语句的技术\r\n9.3.1 指定高频使用的SQL语句\r\n9.3.2 抽取SQL语句的脚本\r\n9.4 SQL语句分级\r\n9.4.1 查找不包含提示的新SQL语句\r\n9.4.2 当使用优化器计划稳定性时查找新SQL语句\r\n9.5 结论\r\n\r\n第10章 调整全表扫描和并行查询\r\n\r\n10.1 评估全表扫描的合法性\r\n10.2 查找要进行Oracle并行查询的表\r\n10.3 Oracle并行查询简介\r\n10.3.1 调用Oracle并行查询\r\n10.3.2 Oracle并行查询初始化参数\r\n10.3.3 设置最优化的并行度\r\n10.3.4 使用并行查询提示\r\n10.3.5 并行查询和表连接\r\n10.4 监控Oracle并行查询的使用\r\n10.4.1 监控并行执行活动\r\n10.4.2 使用STATSPACK监控Oracle并行查询\r\n10.4.3 使用V$视图监控Oracle并行查询\r\n10.4.4 并行查询和分布表\r\n10.5 结论\r\n\r\n第11章 优化OracleSQL语句排序\r\n\r\n11.1 有关Oracle排序的初始化参数\r\n11.1.1 sort_area_size参数\r\n11.1.2 sort_area_retained_size参数\r\n11.1.3 sort_multiblock_read_count参数\r\n11.1.4 已废弃的Oracle8排序参数\r\n11.1.5 优化器模式和排序活动\r\n11.2 通过添加索引避免排序\r\n11.3 不必要的排序\r\n11.4 监控排序活动\r\n11.5 结论\r\n\r\n第12章 使用Oracle提示进行调整\r\n\r\n12.1 提示简介和历史\r\n12.2 在SQL查询中指定提示\r\n12.3 优化器提示\r\n12.3.1 all_rows提示\r\n12.3.2 rule提示\r\n12.3.3 first_rows提示\r\n12.4 表连接提示\r\n12.4.1 use_hash提示\r\n12.4.2 use_merge提示\r\n12.4.3 use_nl提示\r\n12.4.4 star提示\r\n12.5 表反连接提示\r\n12.5.1 merge_aj提示\r\n12.5.2 hash_aj提示\r\n12.6 Index提示\r\n12.6.1 Index提示简介\r\n12.6.2 index_join提示\r\n12.6.3 and_equal提示\r\n12.6.4 index_asc提示\r\n12.6.5 no_index提示\r\n12.6.6 index_desc提示\r\n12.6.7 index_combine提示\r\n12.6.8 index_ffs提示\r\n12.6.9 use_concat提示\r\n12.7 Parallel提示\r\n12.7.1 parallel提示简介\r\n12.7.2 pq_distribute提示\r\n12.7.3 noparallel提示\r\n12.8 表访问提示\r\n12.8.1 full提示\r\n12.8.2 簇表提示\r\n12.8.3 no_expand提示\r\n12.8.4 nocache提示\r\n12.8.5 ordered提示\r\n12.8.6 ordered_predicates提示\r\n12.8.7 push_subq提示\r\n12.9 子查询中的提示\r\n12.10 结论\r\n\r\n第13章 使用优化器计划稳定性进行调整\r\n\r\n13.1 存储框架简介\r\n13.1.1 优化器计划稳定性背后的思想\r\n13.1.2 在向CBO迁移时使用优化器计划稳定性\r\n13.2 使用存储框架要做的准备\r\n13.2.1 设置use_stored_outlines命令\r\n13.2.2 检查重要的初始化参数\r\n13.2.3 创建框架包\r\n13.2.4 创建存储框架表空间\r\n13.3 如何创建和修改存储框架\r\n13.3.1 确定最快的执行计划\r\n13.3.2 为最初的查询创建存储框架\r\n13.3.3 为带有提示的查询创建存储框架\r\n13.3.4 交换存储框架\r\n13.4 管理存储框架\r\n13.4.1 为存储框架使用字典视图和表\r\n13.4.2 使用框架包\r\n13.4.3 管理存储框架的分类\r\n13.5 结论\r\n\r\n第14章 基于成本优化器的调整\r\n\r\n14.1 统计资料和基于成本的优化\r\n14.1.1 动态和静态CBO执行计划思想\r\n14.1.2 收集统计资料的频率\r\n14.1.3 为CBO收集统计资料\r\n14.2 基于成本优化和SQL调整\r\n14.2.1 基于成本的表连接\r\n14.2.2 调整带有子查询的基于成本的SQL语句\r\n14.2.3 调整复杂的布尔查询\r\n14.3 影响基于成本优化器行为的初始化参数\r\n14.3.1 影响表连接的初始化参数\r\n14.3.2 影响CBO索引行为的初始化参数\r\n14.4 结论\r\n\r\n第15章 基于规则优化器的调整\r\n\r\n15.1 调用基于规则的优化\r\n15.2 使用choose作为默认优化模式时存在的问题\r\n15.3 使用基于规则的默认优化器模式\r\n15.3.1 驱动表位置问题\r\n15.3.2 驱动表和表基数\r\n15.3.3 有关调整基于规则查询的提示\r\n15.4 基于规则的优化器无效的情况\r\n15.5 基于规则的优化器是最佳选择的情况\r\n15.6 结论\r\n\r\n第16章 调整表连接\r\n\r\n16.1 表连接类型\r\n16.1.1 等连接\r\n16.1.2 外部连接\r\n16.1.3 自连接\r\n16.1.4 反连接\r\n16.1.5 半连接\r\n16.2 Oracle表连接方法\r\n16.2.1 嵌套循环连接\r\n16.2.2 use_nl提示\r\n16.2.3 散列连接\r\n16.2.4 排序合并连接\r\n16.2.5 星型连接\r\n16.3 评估表连接顺序\r\n16.4 调整分布式SQL表连接\r\n16.4.1 总是为分布式连接使用CBO\r\n16.4.2 察看分布式连接的执行计划\r\n16.4.3 分布式连接调整方针\r\n16.5 结论\r\n\r\n第三部分 SQL高级调整\r\n\r\n第17章 调整SQL的DML语句\r\n\r\n17.1 Oracle存储参数和DML性能\r\n17.1.1 pctfree存储参数\r\n17.1.2 pctused存储参数\r\n17.1.3 freelists参数和DML性能\r\n17.1.4 OPS的freelist组存储参数\r\n17.1.5 存储参数规则的小结\r\n17.2 空闲列表管理和DML性能\r\n17.2.1 链接到空闲列表和从空闲列表断开链接\r\n17.2.2 减少空闲列表重新链接操作\r\n17.3 长数据列和DML行为\r\n17.4 根据平均记录长度来设置pctfree和pctused参数\r\n17.5 缓冲区忙等待以及DML冲突\r\n17.5.1 利用STATSPACK发现DML等待冲突\r\n17.5.2 用STATSPACK确定缓冲区忙等待\r\n17.6 SQLupdate语句、子查询和并行DML\r\n17.7 DML执行时约束的开销\r\n17.8 用DML维持索引所需的开销\r\n17.9 使用PL/SQL批量插入来提高SQL插入数据的速度\r\n17.10 结论\r\n\r\n第18章 用临时表调整SQL\r\n\r\n18.1 与字典视图一起使用CTAS\r\n18.2 结论\r\n\r\n第19章 SQL子查询的调整\r\n\r\n19.1 Oracle子查询的基本知识\r\n19.2 关联与非关联于查询\r\n19.2.1 数据量规模和子查询的问题\r\n19.2.2 子查询的执行时间\r\n19.2.3 子查询执行的基本特征\r\n19.3 子查询的自动SQL转换\r\n19.4 调整具有IN和EXISTS子句的子查询\r\n19.4.1 使用研子句的非关联子查询\r\n19.4.2 带有IN子句的关联子查询\r\n19.4.3 带有EXISTS子句的非关联子查询\r\n19.4.4 使用EXISTS子句的关联子查询\r\n19.5 调整带有NOTIN和NOTEXISTS子句的子查询\r\n19.5.1 使用NOTIN运算符的非关联子查询\r\n19.5.2 带有NOT IN运算符的关联子查询\r\n19.5.3 带有NOTEXISTS运算符的关联子查询\r\n19.5.4 使用NOTEXISTS运算符的非关联子查询\r\n19.6 调整带有不相等条件的子查询\r\n19.6.1 在于查询中使用ALL和ANY子句\r\n19.6.2 在于查询中使用不相等条件\r\n19.7 用提示来提高于查询的执行速度\r\n19.8 结论\r\n\r\n第20章 用索引调整SQL\r\n\r\n20.1 把握进行索引的时机\r\n20.1.1 提取SQL语句\r\n20.1.2 添加索引\r\n20.1.3 衡量全表扫描的合法性\r\n20.1.4 衡量带有新索引的查询的执行时间\r\n20.1.5 预测整个数据库的受益情况\r\n20.2 通过添加索引来消除排序\r\n20.3 不必要的排序\r\n20.4 索引谓词\r\n20.5 B树索引中可供选择的索引\r\n20.5.1 位图索引\r\n20.5.2 基于函数的索引\r\n20.5.3 反主键索引与SQL性能\r\n20.6 带有研条件的查询的索引用法\r\n20.7 结论\r\n\r\n第21章 数据仓库的SQL调整\r\n\r\n21.1 大型数据表连接调整\r\n21.1.1 ordered提示\r\n21.1.2 order_predicates提示\r\n21.2 Oracle分区与OracleSQL调整\r\n21.2.1 分区和SQL数据表连接\r\n21.2.2 分区与SQL执行速度\r\n21.3 Oracle的并行查询和OracleSQL调整\r\n21.3.1 并行查询的int.ora参数\r\n21.3.2 设置最优的并行度\r\n21.3.3 使用并行查询提示\r\n21.4 数据仓库查询的Oracle优化\r\n21.4.1 optimizer_search_limit参数\r\n21.4.2 optimizer_max_permutations参数\r\n21.5 结论\r\n\r\n第22章 用STATSPACK进行SQL调整\r\n\r\n22.1 STATSPACK和SQL数据收集\r\n22.2 用STATSPACK对Oracle排序进行调整\r\n22.3 STATSPACK跟踪SQL\r\n22.3.1 SQL快照阈值\r\n22.3.2 STATSPACK前10位报表\r\n22.4 结论\r\n\r\n第23章 调整使用内置函数和特殊运算符的SQL语句\r\n\r\n23.1 在SQL中使用like和case子句\r\n23.1.1 在Oracle查询中使用like子句\r\n23.1.2 用case语句合并多重扫描\r\n23.2 调整带有BIF的SQL语句\r\n23.2.1 BIF与字符数据类型一起使用\r\n23.2.2 BIF与日期数据类型一起使用\r\n23.2.3 使用substrBIF\r\n23.2.4 Oracle9i中对BIF的改进\r\n23.3 结论\r\n23.4 本书的总结