编辑推荐
15年资深DBA经验总结,从100余个一线实例中总结出的SQL优化原理、技巧和要点
15年DBA经验结晶,依托近百个真实案例,详细剖析SQL语句优化的原理、方法及技术要点,所讲内容均可直接落地。
所有内容均来自一线真实项目,以一线开发工程师的语言和视角展开介绍,无论是初学者还是中端技术人员,都可轻松接受、吸收
Oracle数据库使用十分广泛,长期盘踞数据库使用排行榜首位。而SQL语句作为访问数据的接口语言,其运行效率的高低直接决定了数据库的整体性能。SQL语句优化本身覆盖面较广,涉及数据库领域的诸多方面,其中优化器部分尤为复杂。
本书作者根据多年的工作经验,围绕SQL优化这一核心主题,多角度阐述了SQL语句优化的各个方面。内容兼顾技术的深度和广度,结合大量案例,方便读者更好地了解SQL语句优化的本质。本书特别适合广大从事数据库开发工作的初中级读者阅读,可帮助这部分读者深入学习与SQL优化相关的原理方法和技巧,为以后的工作和进一步提高打下良好的基础。
本书既是一本不错的学习资料,也可作为案头必备的手册,供读者随时翻阅。
内容简介
SQL是*重要的关系数据库操作语言。SQL语句的运行效率,对于数据库的整体性能至关重要。因此,SQL语句的优化就成为数据库专业人员必须掌握的一门技能。作为一个长期从事数据库工作的技术人员,经常面对很多初学者对如何入门、如何提高SQL语句优化能力的困惑。本书规避了市面上大多关于SQL优化的书籍讲解内容过于深奥的问题,以一线开发工程师的语言和视角展开,理论与实践并重,不仅适合初学者,也适合中端技术人员进一步提高。
本书以大量案例为依托,系统讲解了SQL语句优化的原理、方法及技术要点。本书尤为注重实践,在章节中引入了大量的案例,便于学习者实践、测试,反复揣摩。
全书分为三篇:
引言篇,总结了实际工作中常见的问题,并通过真实案例让读者直观感受到SQL语句优化的重要。同时在每个案例后面,还针对案例中出现的问题进行了总结。
原理篇,主要讲解了和SQL语句优化相关的基础知识及必要的一些操作,包括了优化器、成本、执行计划、统计信息、语句解析、游标、绑定变量、数据对象等诸多方面。
实战篇,这是本书的重点,详细讲述了优化器对于SQL语句的多种处理方式,包括查询转换、数据对象访问方式、表关联、半/反连接、子查询、排序、并行等等。读者了解了这些内容,可以更好地理解优化器的行为,从而使优化更加有的放矢。这部分实战性极强,读者可以作为案头参考资料,随时查阅,反复实践。
另外,本书还提供了5个附录,这部分对书中提到的案例编写方式及相关知识点进行了详细说明,目的是帮助读者,尤其是初学者更好地进行实践。
作者简介
韩锋,早年从事软件开发工作,后因个人兴趣转入数据库领域。有着多年的一线数据库架构、设计、开发经验,曾担任多家公司首席DBA、数据库架构师等职。现就职于宜信,曾就职于*当网、TOM在线等公司。精通多种关系型数据库,包括Oracle、MySQL、GreenPlum、Informix等,对NoSQL及大数据相关技术也很感兴趣,实践经验丰富。
目录
前言
第一篇引入篇
第0章引言
第1章与SQL优化相关的几个案例
案例1-条SQL引发的血案
案例2糟糕的结构设计带来的问题
案例3规范SQL写法好处多
案例4“月底难过
案例5 COUNT(*)到底能有多快
案例6“抽丝剥茧”找出问题所在
第二篇原理篇
第2章优化器与成本
2.1优化器
2.1.1基于规则的优化器
2.1.2基于成本的优化器
2.1.3对比两种优化器
2.1.4优化器相关参数
优化器相关Hint
基本概念
计算公式
计算示例
第3章执行计划
3.1概述
3.1.1什么是执行计划
3.1.2库执行计划存储方式
3.2解读执行计划
3.2.1执行顺序
3.2.2访问路径
3.3执行计划操作
3.3.1查看执行计划
3.3.2固定执行计划
3.3.3修改执行计划
第4章统计信息
4.1统计信息分类
4.1.1系统统计信息
4.1.2对象统计信息
4.1.3数据字典统计信息
4.1.4内部对象统计信息
?4.2统计信息操作
4.2.1系统统计信息
4.2.2对象统计信息
4.2.3数据字典统计信息
4.2.4内部对象统计信息
第5章SQL解析与游标
5.1解析步骤
5.2解析过程
5.3游标示例
第6章绑定变量
6.1使用方法
6.2绑定变量与解析
6.3游标共享
第7章SQL优化相关对象
7.1表
7.2字段
7.3索引
7.4视图
7.5函数
7.6数据链(DB-LINK)
第8章SQL优化相关存储结构
8.1表空间
8.2段
8.3区
8.4块
第9章特有SQL
9.1 MERGE-----
9.2 INSERT ALL
9.4 CONNECT BY/START WITH
第三篇实战篇
第10章查询转换
10.1查询转换的分类及说明
10.2查询转换——子查询类
10.3查询转换——视图类
10.4查询转换——谓词类
10.5查询转换——消除类
10.6查询转换——其他
第11章访问路径
11.1表访问路径
11.1.1全表扫描
11.1.2 ROWID扫描
11.1.3采样扫描
11.2 B树索引访问路径
1113位图索引访问路径
11.4其他访问路径
第12章表间关联
12.1关联关系
12.2表关联实现方法
12.3嵌套循环连接
12.4排序合并连接
12.5哈希连接
12.6其他连接方式
第13章半连接与反连接
13.1半连接
?13.2反连接
第14章排序
14.1引发排序的操作
14.2避免和减少排序
14.2.1优化原则及基本方法
14.2.2避免排序的示例
14.3排序过程及内存使用
14.4执行计划中的“Sort”
第15章子查询
15.1处理方式
15.2子查询分类
15.2.1按照语法分类
15.2.2按照谓词分类
15.2.3示例
15.3子查询优化
15.4子查询特殊问题
15.4.1空值问题
15.4.2 0R问题
15.4.3 [NOT] IN/EXISTS问题
第16章并行
16.1并行操作
16.1.1并行查询
16.1.2并行DML
16.1.3并行DDL
16.2并行级别
16.3并行原理
16.3.1从属进程
16.3.2粒度
附录A常用技巧
附录BSQL优化参数
附录CSQL优化数据字典
附录DSQL优化等待事件
附录ESQL优化提示
前言/序言
为什么要写这本书我早年毕业后,曾长期从事ERP、电子政务类软件的开发工作,作为一个数据库的使用者,我接触到了大量数据库,如FoxPro、SQLServer、Oracle、Informix-----在不断的使用过程中,我对这一领域越来越感兴趣,并最终选择了数据库这条路。曾经长期担任DBA、数据库架构师等职,参与了大大小小很多项目的数据库设计、开发、优化工作,并在这一过程中积累了一些经验。在多年的工作中,我发现数据库领域存在一些现象。
现象一,开发人员将数据库视为“黑盒子”。开发人员不关心、不重视,也不了解SQL语句的执行情况、数据库的运行机理。甚至在很多O/RMapping工具的辅助下,连基本的SQL语句也不需要手工编写。固然,通过引入这些工具可以大大加快研发速度,但其带来的弊端是,开发人员并不了解数据库是如何完成这些请求并获得数据的,优化更是无从谈起。
现象二,对SQL质量重视程度不足。我在长期的工作中发现,绝大多数公司对SQL质量的重视程度严重不足。往往在项目的前期设计、代码开发、测试等多个环节,都没有DBA的参与。直到项目上线,甚至到出现性能问题时,才会有DBA介入处理。这种救火员的模式,往往效果不好,即使有了解决方案,其代价、成本也必然是巨大的。
现象三,开发人员想提高却无从下手。有些开发人员认识到SQL语句质量的重要性,想要提高却无从下手。一方面,他们本身不具备数据库的专业知识;另一方面,SQL编程本身也有其特殊性,与其他常用开发语言有较大差异。正是这些因素,导致开发人员想要提高却困难重重。
现象四,重运行维护,轻开发优化。数据库的稳定运行、数据安全等是非常重要的,这也是DBA的核心职责之一。但对于开发优化,则往往存在重视程度不足的问题。我们经常会看到一个项目里,公司会花大笔费用购买昂贵的硬件、备份软件等,却不舍得购买与数据库优化、SQL审计相关的软件。此外,随着自动化运维的逐步推广,乃至数据库云服务的逐步成熟,传统意义的数据库运维工作必然会逐步萎缩,取而代之的则是数据库的设计、开发乃至整体架构工作逐步增多。这也是DBA未来发展的一个方向。
现象五,资料繁多,却无从选择。Oracle数据库在国内流行多年,该领域的书籍也非常多,但涉及优化类的相对较少,特别是局限在SQL语句优化范畴的。近年来我也发现了几本不错的书籍,但普遍存在技术偏深、可操作性不强的问题。广大数据库开发的初学者或者有一定经验但急需提高的读者,不太适用。
正是因为存在上述种种现象,促使我有了将多年的经验汇集成册,编写出版的想法。
一方面是能够帮助有相关需求的人,另一方面也是对自己多年工作的一个总结。最后,希望这本书能够引领开发人员、DBA在SQL语句的编写优化上更进一步。倘若这本书能够帮助大家解决实际中遇到的问题,我将非常荣幸。
本书特色本书从多角度阐述了SQL语句优化的方方面面,总体上可分为两大部分。第一部分主要讲解跟SQL优化相关的背景知识和基本原理;第二部分重点讲述了优化器的各种优化手段。本书整体具有以下几个特点:
口书中内容由项目而生,以一线开发工程师的视角和言语展开。
口注重实战。几乎所有的章节都配以代码,读者可在环境中直接编写代码并运行。大部分代码都附有详细的说明,便于读者理解内容。
口涵盖了SQL语句的诸多方面,特别是第二部分,可作为工作手册供大家优化时查阅使用。
读者对象本书适用于想要提高SQL语句运行效率乃至数据库整体性能的所有人,包括架构师、DBA、开发人员、测试人员等。书中讲解了Oracle数据库的SQL语句优化,但除了个别Oracle自有的优化特性外,其核心思想也适用于其他关系型数据库。书中没有讲解Oracle体系结构和SQL语言本身,这里假设大部分人已熟悉Oracle和SQL语言。具体来说,包括但不局限于下列人员:
口Oracle数据库开发人员;口数据库架构师、数据库管理员;口其他关系型数据库的从业者;口对SQL语句优化感兴趣的人员;口大专院校计算机相关专业的学生。
如何阅读本书本书分为四大部分:
第一部分为引入篇(第O~1章)。
引言部分我结合多年的工作经验,总结了进行SQL语句优化时可能会面临的一些问题。读者可以观察是否在自己的身边也存在类似的问题。后面还讲述了一些常见的关于SQL优化的误区,以方便读者正确看待SQL语句优化。
第1章讲述了我曾经处理过的几个案例。通过这些活生生的案例,可以让读者更直观感受到SQL语句优化的重要。同时在每个案例后面,我还针对案例出现的问题进行了总结。
第二部分为原理篇(第2~9章)。
第2章讲述了SQL语句优化的核心组件——优化器,以及优化的最基础概念——成本。这部分非常重要,建议初学者仔细阅读。
第3~6章介绍了和优化相关的几个重要概念:执行计划、统计信息、SQL解析、游标、绑定变量。这部分都较为基础,建议初学者根据情况选择阅读。
第7~8章介绍了SQL语句的实体对象及物理上是如何存储的。这部分对于数据库结构设计有较大帮助。此外,在对SQL语句进行优化时,也需要考虑相关对象的情况,因为优化措施可能会影响该对象的其他语句,需要统筹考虑。
第9章介绍了Oracle专有的一些SQL语句。有时使用这些语句,可以达到意想不到的效果。如不考虑以后有数据库平台迁移的问题,可以充分利用这些语句。
原理篇是我们是迈人实战篇的基础,它几乎覆盖了SQL优化相关的所有原理知识。通过对这些内容的学习,可以为后面的优化部分打下良好的基础。如果你已经拥有相关知识,可以直接进入实战篇。
第三部分为实战篇(第10~16章)。它是本书的重点。
第10章介绍了一个重要的优化手段——查询转换。这部分相对来说比较难,相关资料说明较少,可作为重点来看。
第11章介绍了数据对象的访问方式。这部分也非常基础,应重点来看。
第12~16章介绍了多种操作及常见的优化手段,包括表关联、半/反连接、子查询、排序、并行等。这部分读者可根据实际需要进行有重点的阅读。
实战篇是本书的重点,这部分覆盖了常见优化的多个方面。读者可将这部分作为参考?资料,当需要时反复阅读。这部分还包含了大量示例代码,读者可以通过实践反复体会。
本书还提供了读者可能感兴趣的拓展知识,放在附录。
附录介绍了前面各章节提到的数据库参数、数据字典、等待事件、提示等内容。此外,还包括如何构造样例数据,方便读者进行实际操作。
以上是本书各个章节的安排情况和写作思路,希望有助于读者阅读。
勘误和支持由于笔者水平有限,加之编写时间仓促,书中难免会出现一些错误或者不准确的地方,恳请读者批评指正。大家可以通过邮箱hanfeng7766@sohu.com与我取得联系。你可以将书中的错误和问题反馈给我,我将尽量在线上为你提供最满意的解答。期待能够得到你的真挚反馈。
致谢感谢每一位帮助过我的老师、同事和领导,是你们让我有了学习和总结的机会。感谢宜信公司的各级领导、同事对我的支持和鼓励,你们的支持充分体现了宜信开放、分享的企业文化。此外,也要感谢我的老东家——当当网,在那里我积累了丰富的经验,并坚定了完成本书的信心。
感谢机械工业出版社华章公司的编辑孙海亮,在这一年多的时间中始终支持我的写作。
第一次著书写作,过程漫长而艰辛,正是你的鼓励和帮助引导我顺利完成全部书稿。
感谢远在哈尔滨的爸爸、妈妈和姐姐,是你们在艰苦环境下将我培养成人,并时时刻刻为我灌输爱的力量!感谢我的岳父母,是你们承担了琐碎的家务,让我能安心写作。最后,也是最重要的,一如既往地感谢陪伴我左右的妻子和孩子,你们的爱和支持是本书得以完成的最大动力。
谨以本书献给我最亲爱的家人和朋友,以及正在为自我实现而奋斗的、充满朝气的IT工程师们!
韩锋
SQL优化最佳实践:构建高效率Oracle数据库的方法与技巧 下载 mobi epub pdf txt 电子书 格式