编辑推荐
推荐购买:
《Spark大数据处理技术》 ; ; ; ; ; ; ; ; ; ; ;
(Shark|Spark SQL|Spark Streaming|Graphx|Tachyon深度解密Spark完整生态 **Committer凝聚一流实力与超前视野 Spark创始人及实践先驱联合推荐)
《Hadoop硬实战》 ; ; ; ; ; ; ;
学习Hadoop和Mapreduce不二之选 85个Hadoop高级技巧实战案例 ;
《寻路大数据:海量数据与大规模分析》 ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ;
(Google大数据专家力作超豪华译者|作序者微博|高德|UCloud三大老总联合作序推荐真正梳理趋势与生态|方案与工具选型|应用场景与价值挖掘的独家内参) ;
《深入理解Oracle RAC 12c》 ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ;
本土Oracle数据库性能优化**大师泣血力作
集十数年实战修行与潜心钻研之大成
盖国强等国内数据库一线名家联合推荐
囊括数据库性能优化技术所有分支与脉络,讲解通俗,实例经典
 ;
内容简介
《基于Oracle的SQL优化》是一本与众不同的书,它的目的是使读者真正掌握如何在 Oracle数据库里写出高质量的 SQL语句,以及如何在 Oracle数据库里对有性能问题的 SQL做诊断和调整。
《基于Oracle的SQL优化》从 Oracle处理 SQL的本质和原理入手,由浅入深、系统地介绍了 Oracle数据库里的优化器、执行计划、Cursor和绑定变量、查询转换、统计信息、Hint和并行等这些与 SQL优化息息相关的本质性内容,并辅以大量极具借鉴意义的一线 SQL优化实例,阐述了作者倡导的“从本质和原理入手,以不变应万变”的优化思路,最后还介绍了作者在实际工作中总结出来的 Oracle数据库里 SQL优化的方法论。
《基于Oracle的SQL优化》适用于使用 Oracle数据库的开发人员、Oracle DBA和其他对 Oracle数据库感兴趣的人员,也可以作为各院校相关专业的教学辅导和参考用书,或作为相关培训机构的培训教材。
作者简介
崔华,网名dbsnake,Oracle ACE, ACOUG成员。 资深Oracle数据库工程师,拥有Oracle数据库技术各个领域的经验,尤其是在Oracle数据库性能优化与备份恢复方面经验丰富。 他与其他人合作编写了多本Oracle技术书籍,他经常在Oracle相关活动中发表演讲并在自己的博客上撰写了大量技术文章。
目录
第 1章 Oracle里的优化器 ...................................1
1.1 什么是 Oracle里的优化器 ...........................1
1.1.1 基于规则的优化器............................2
1.1.2 基于成本的优化器........................9
1.1.2.1 集的势 ..............................11
1.1.2.2 可选择率 ...............................11
1.1.2.3 可传递性..............................16
1.1.2.4 CBO的局限性...................................18
1.2 优化器的基础知识 .......................19
1.2.1 优化器的模式..................................19
1.2.2 结果集............................21
1.2.3 访问数据的方法................................22
1.2.3.1 访问表的方法.............................22
1.2.3.1.1 全表扫描 ....................................22
1.2.3.1.2 ROWID扫描 .....................................23
1.2.3.2 访问索引的方法 .....................................24
1.2.3.2.1 索引唯一性扫描 ...............................25
1.2.3.2.2 索引范围扫描 .......................................25
1.2.3.2.3 索引全扫描 ......................................28
1.2.3.2.4 索引快速全扫描 ...............................29
1.2.3.2.5 索引跳跃式扫描 ...............................31
1.2.4 表连接..........................33
1.2.4.1 表连接的类型......................................34
1.2.4.1.1 内连接.............................................34
1.2.4.1.2 外连接.................................................37
1.2.4.2 表连接的方法............................................47
1.2.4.2.1 排序合并连接 ..................................47
1.2.4.2.2 嵌套循环连接 ...................................48
1.2.4.2.3 哈希连接 ..........................................51
1.2.4.2.4 笛卡儿连接 ......................................56
1.2.4.3 反连接 ...........................................58
1.2.4.4 半连接 ................................63
1.2.4.5 星型连接............................................65
1.3 优化器模式对 CBO计算成本带来巨大影响的实例...............66
1.4 总结.......................80
第 2章 Oracle里的执行计划 ........................... 82
2.1 什么是执行计划.................................82
2.2 如何查看执行计划 ..........................85
2.2.1 explain plan命令....................................86
2.2.2 DBMS_XPLAN包............................89
2.2.3 AUTOTRACE开关 ...............................95
2.2.4 10046事件与 tkprof命令.............................99
2.3 如何得到真实的执行计划..................................102
2.4 如何查看执行计划的执行顺序.............................118
2.5 Oracle里的常见执行计划 .......................122
2.5.1 与表访问相关的执行计划.................................122
2.5.2 与 B树索引相关的执行计划.................................124
2.5.3 与位图索引相关的执行计划...................................129
2.5.4 与表连接相关的执行计划.......................................138
2.5.5 其他典型的执行计划...............................................146
2.5.5.1 AND-EQUAL(INDEX MERGE).....................146
INDEX JOIN ................................148
2.5.5.2 VIEW.......................149
2.5.5.3FILTER ..................................151
2.5.5.4 SORT ....................................154
2.5.5.5
2.5.5.6 UNION/UNION ALL......................167
CONCAT..................................................168
2.5.5.7
CONNECT BY...................................................171
2.5.5.8
2.6 Oracle里执行计划的稳定 ................................172
2.6.1 使用 SQL Profile来稳定执行计划 ...........................173
2.6.1.1 Automatic类型的 SQL Profile ...............................173
2.6.1.2 Manual类型的 SQL Profile......................................179
2.6.2 使用 SPM来稳定执行计划........................................190
2.7 总结..............................203
第 3章 Oracle里的 Cursor和绑定变量 ......................... 204
3.1 Oracle里的 Cursor.............................204
3.1.1 Oracle里的 Shared Cursor.............................204
3.1.1.1 Shared Cursor的含义 ..........................................204
3.1.1.2 硬解析 ................................................212
3.1.1.3 软解析 ...................................214
3.1.2 Oracle里的 Session Cursor..............................215
3.1.2.1 Session Cursor的含义 .....................................215
3.1.2.2 Session Cursor的相关参数解析...........................218
OPEN_CURSORS.........................................218
3.1.2.2.1 SESSION_CACHED_CURSORS ............................219
3.1.2.2.2CURSOR_SPACE_FOR_TIME ..............................221
3.1.2.2.3
3.1.2.3 Session Cursor的种类和用法 .............................222
3.1.2.3.1 隐式游标 ........................................222
3.1.2.3.2 显式游标 ........................................225
3.1.2.3.3 参考游标 ........................................230
3.2 Oracle里的绑定变量 ...............................237
3.2.1 绑定变量的作用....................................237
3.2.2 绑定变量的典型用法.........................................238
3.2.3 绑定变量的使用原则和最佳实践..............................245
3.2.3.1 PL/SQL批量绑定模板一 ...................................245
3.2.3.2 PL/SQL批量绑定模板二 .....................................247
3.2.4 绑定变量窥探............................................258
3.2.5 绑定变量分级..................................270
3.2.6 绑定变量的个数不宜太多........................................276
3.2.7 批量绑定时如何处理错误.......................................280
3.2.8 如何得到已执行的目标 SQL中绑定变量的值 ..........283
3.3 Oracle里的游标共享 .......288
3.3.1 常规游标共享..............................289
3.3.2 自适应游标共享........................297
3.4 Oracle里的应用类型 ...............................320
3.4.1 Session Cursor的生命周期.........................................320
3.4.2 应用类型一(硬解析)................................................322
3.4.3 应用类型二(软解析)...............................................323
3.4.4 应用类型三(软软解析)..........................................323
3.4.5 应用类型四(一次解析、多次执行)....................324
3.4.6 四种应用类型的实测性能对比..............................325
3.5 总结.............................333
第 4章 Oracle里的查询转换 .......................... 335
4.1 Oracle里查询转换的作用 ................335
4.2 子查询展开.................................336
4.3 视图合并............................344
4.3.1 简单视图合并...........................345
4.3.2 外连接视图合并..................351
4.3.3 复杂视图合并.....................354
4.4 星型转换.....................365
4.5 连接谓词推入 ................372
4.6 连接因式分解 ................379
4.7 表扩展 .......................387
4.8 表移除 .............396
4.9 Oracle如何处理 SQL语句中的 IN.............401
IN-List Iterator .................402
4.9.1
4.9.2 IN-List Expansion / OR Expansion ................404
IN-List Filter .............409
4.9.3
4.9.4 对 IN做子查询展开/视图合并 .............410
4.10 查询转换的综合应用实例(逻辑读从 200万降到 6) .....413
4.11总结..............................420
第 5章 Oracle里的统计信息 ........ 422
5.1 什么是 Oracle里的统计信息...........422
5.2 Oracle里收集与查看统计信息的方法 .............423
5.2.1 收集统计信息...................423
5.2.1.1 用 ANALYZE命令收集统计信息...........423
5.2.1.2 用 DBMS_STATS包收集统计信息..........428
5.2.1.3 ANALYZE和 DBMS_STATS的区别........432
5.2.2 查看统计信息................433
5.3 表的统计信息 ..............435
5.3.1 表统计信息的种类和含义.........435
5.3.2 表统计信息不准导致 SQL性能问题的实例 .................437
5.4 索引的统计信息..............440
5.4.1 索引统计信息的种类和含义.................440
5.4.2 聚簇因子的含义及重要性............442
5.5 列的统计信息 ..................450
5.5.1 列统计信息的种类和含义..............450
5.5.2 列统计信息不准导致谓词越界的实例..........454
5.5.3 直方图........................460
5.5.3.1 直方图的含义...............460
5.5.3.2 直方图的类型.................462
5.5.3.2.1 Frequency类型的直方图 ...........463
5.5.3.2.2 Height Balanced类型的直方图 ..................471
5.5.3.3 直方图的收集方法................................475
5.5.3.4 直方图对 CBO的影响 ....................477
5.5.3.4.1 直方图对 Shared Cursor的影响 .............477
5.5.3.4.2 直方图对可选择率的影响 ................482
5.5.3.5 使用直方图的注意事项...........................495
5.6 全局统计信息 ............................496
5.7 动态采样............................507
5.8 多列统计信息 ...........................516
5.9 系统统计信息 .............................519
5.10 数据字典统计信息..................536
5.11内部对象统计信息 .............................539
5.12 Oracle里的自动统计信息收集 .........................546
5.13 Oracle里应如何收集统计信息 ..........................563
5.14 总结.........................567
第 6章 Oracle里的 Hint..................... 568
6.1 什么是 Hint .....................568
6.2 Hint的用法 ...............................576
6.3 Hint被 Oracle忽略的常见情形 ...............590
6.3.1 情形一:使用的 Hint有语法或者拼写错误.................591
6.3.2 情形二:使用的 Hint无效.........................592
6.3.3 情形三:使用的 Hint自相矛盾..............597
6.3.4 情形四:使用的 Hint受到了查询转换的干扰...........599
6.3.5 情形五:使用的 Hint受到了保留关键字的干扰.........602
6.4 常见的 Hint ...............605
6.4.1 与优化器模式相关的 Hint................606
6.4.1.1 ALL_ROWS ...............606
6.4.1.2 FIRST_ROWS(n)...................606
RULE........................608
6.4.1.3
6.4.2 与表访问相关的 Hint...................615
FULL .......................615
6.4.2.1 ROWID .............615
6.4.2.2
6.4.3 与索引访问相关的 Hint...................615
INDEX .........................615
6.4.3.1 NO_INDEX .....................616
6.4.3.2 INDEX_DESC ...............617
6.4.3.3 INDEX_COMBINE................618
6.4.3.4 INDEX_FFS ..................620
6.4.3.5
6.4.3.6 INDEX_JOIN.............621
6.4.3.7 AND_EQUAL.....................622
6.4.4 与表连接顺序相关的 Hint...................624
ORDERED ................................624
6.4.4.1 LEADING ........................626
6.4.4.2
6.4.5 与表连接方法相关的 Hint.............628
6.4.5.1 USE_MERGE ............628
NO_USE_MERGE .............631
6.4.5.2 USE_NL............633
6.4.5.3 NO_USE_NL .................634
6.4.5.4 USE_HASH.............635
6.4.5.5 NO_USE_HASH ..........635
6.4.5.6
6.4.5.7 MERGE_AJ.........636
NL_AJ............................637
6.4.5.8 HASH_AJ.................637
6.4.5.9 MERGE_SJ....................637
6.4.5.10 NL_SJ...........................638
6.4.5.11HASH_SJ .......................639
6.4.5.12
6.4.6 与查询转换相关的 Hint .....................639
USE_CONCAT ...............639
6.4.6.1 NO_EXPAND ...............640
6.4.6.2 MERGE................642
6.4.6.3 NO_MERGE................642
6.4.6.4 UNNEST ....................643
6.4.6.5
6.4.6.6 NO_UNNEST........................643
EXPAND_TABLE .................................644
6.4.6.7 NO_EXPAND_TABLE .......................644
6.4.6.8
6.4.7 与并行相关的 Hint ...........................645
PARALLEL...................................645
6.4.7.1 NO_PARALLEL ................................652
6.4.7.2
6.4.7.3 PARALLEL_INDEX ................................654
NO_PARALLEL_INDEX......................................656
6.4.7.4
6.4.8 其他常见 Hint ............................656
DRIVING_SITE..............................656
6.4.8.1 APPEND ...........................................659
6.4.8.2 APPEND_VALUES ........................................662
6.4.8.3
6.4.8.4 PUSH_PRED .......................664
NO_PUSH_PRED ................................666
6.4.8.5
6.4.8.6 PUSH_SUBQ....................................666
6.4.8.7 NO_PUSH_SUBQ................669
OPT_PARAM ..............................................670
6.4.8.8 OPTIMIZER_FEATURES_ENABLE ...............................672
6.4.8.9
6.4.8.10 QB_NAME ........................................674
CARDINALITY .................................674
6.4.8.11SWAP_JOIN_INPUTS .............................677
6.4.8.12
6.5 用 Cardinality Hint解决 ORA-01555错误的实例...............682
6.6 总结...............................693
第 7章 Oracle里的并行 ..................... 695
7.1 Oracle里并行的基本概念 ...............695
7.1.1 为什么要用并行.................695
7.1.2 并行的理论基础....................696
7.1.3 Oracle里能够并行执行的操作...............697
7.1.4 Oracle里与并行有关的术语及解释 ..................707
7.1.4.1 Query Coordinator .............708
7.1.4.2 Query Slaves和 Query Slave Set.............708
7.1.4.3 Table Queues.........716
7.1.4.4 数据传递方法.............721
7.1.4.5 granules............735
7.1.4.6 直接读取 ............737
7.1.5 深入解析并行执行计划的实例.............746
7.2 Oracle里并行的控制 ..........755
7.2.1 Oracle里如何开启并行 .............755
7.2.2 Oracle里并行度的控制 .............760
7.2.3 Oracle RAC环境下的并行...........771
7.2.4 Oracle里与并行相关的参数 ..............775
PARALLEL_MAX_SERVERS .........775
7.2.4.1 PARALLEL_MIN_SERVERS ......................776
7.2.4.2
7.2.4.3 自动并行相关的参数 ...................776
PARALLEL_DEGREE_POLICY ................................776
7.2.4.3.1 PARALLEL_MIN_TIME_THRESHOLD ...................................776
7.2.4.3.2
7.2.4.3.3 PARALLEL_DEGREE_LIMIT ..................777
PARALLEL_SERVERS_TARGET..................................777
7.2.4.3.4
7.2.4.4 自适应并行相关的参数...............778
PARALLEL_ADAPTIVE_MULTI_USER ...............778
7.2.4.4.1 PARALLEL_MIN_PERCENT ........................778
7.2.4.4.2 PARALLEL_AUTOMATIC_TUNING .........778
7.2.4.4.3
7.2.4.5 其他参数 ............................778
PARALLEL_THREADS_PER_CPU ...................................778
7.2.4.5.1 PARALLEL_EXECUTION_MESSAGE_SIZE.............779
7.2.4.5.2 PARALLEL_FORCE_LOCAL.........................779
7.2.4.5.3
7.2.5 绕开 Oracle并行执行 Bug大幅提升性能的实例 ................779
7.3 总结..........................805
第 8章 Oracle里 SQL优化的方法论 ................... 807
8.1 Oracle里如何做 SQL优化...................807
8.1.1 Oracle里 SQL优化的本质是基于对 CBO和执行计划的深刻理解 ......807
8.1.2 Oracle里 SQL优化需要联系实际的业务 ...................819
8.1.3 Oracle里 SQL优化需要适时使用绑定变量 ............824
8.2 Oracle里 SQL优化的方法论在实战中的验证...............824
8.3 总结......................841
免费在线读
崔华的新作付梓,我有16字赠言相送:十载痴迷,三年砥砺,书成纸贵,其华熠熠。崔华在Oracle数据库技术研究和钻研方面完全体现了“痴迷”二字,坚持十数年而不辍,屡屡有所得而忘食;而他在技术上之大成在最近三年,砥而砺之,始有此书,厚达千页,书成而纸为之贵。我相信其中所展现的才华必将以其熠熠之辉耀人耳目。在与崔华相识之数年间,我从他的研究和文章中受教良多,相信读者朋友们也必定可以从本书中获益。
盖国强 云和恩墨创始人,Oracle ACE总监,ACOUG联合创始人
使用Oracle数据库无非是想获得极佳的应用性能,而几乎所有应用的性能都受到SQL语句的莫大影响,可以说SQL语句质量的高下决定了 Oracle数据库的快慢。“从本质和原理入手,以不变应万变”,正是优化SQL的上上之策。崔华对技术的热情和钻研在我所识朋友中数一数二,耗时17个月始得此部大作,如果你想获得SQL执行时间瞬间从数小时缩至不到1秒的美妙体验,本书不容错过。
张乐奕 云和恩墨技术总监,Oracle ACE总监,ACOUG联合创始人
毫无疑问,这是关于Oracle数据库优化的一部扛鼎之作,崔华对本书倾注的精力和写作态度,都令我非常敬佩。作者非常详尽地介绍了优化器、统计信息、执行计划、查询转换等重要内容。深入研究这些内容,SQL优化的能力一定会有巨大提升。
熊军 云和思墨西区技术总监,Oracle ACE
我最佩服崔华对各种问题刨根究底式的研究,如他对Trace文件的阅读分析,可谓曲径探幽,引人入胜,完美地重现了系统动态运行时的内幕。本书对各种复杂原理条分缕析,对各种现实问题进行了透彻的讲解;而这些解说之所以如此清晰明了、让人信服,我想最根本的原因,是在于作者所编写的大量示例及对这些示例的精彩演绎。这些示例及其背后的总结和升华,对于任何一位实践工程师来说,都是一处处不可多得的熠熠生辉的宝藏。
黄凯耀 甲骨文Real-World Performance Group首席工程师
基于Oracle的SQL优化(社区万众期待,数据库优化扛鼎巨著) pdf下载声明
本pdf资料下载仅供个人学习和研究使用,不能用于商业用途,请在下载后24小时内删除。如果喜欢,请购买正版