首页>参考读物>计算机科学与技术>数据库

SQL优化最佳实践:构建高效率Oracle数据库的方法与技巧
作者 : 韩锋 著
丛书名 : 数据库技术丛书
出版日期 : 2016-04-28
ISBN : 978-7-111-53454-9
定价 : 69.00元
扩展资源下载
扩展信息
语种 : 简体中文
页数 : 320
开本 : 16
原书名 :
原出版社:
属性分类: 店面
包含CD :
绝版 : 未绝版
图书简介

本书共分为三篇,第一篇以5个真实案例突出SQL优化在日常工作中的重要性;第二篇为优化基础篇,主要面向初级读者,也是本书的重点篇,主要以小的案例及实际操作介绍的形式介绍了有关SQL优化的方方面面,比如优化器、执行计划、变量、相关对象等等;第三篇为扩展篇,是为中级读者及想进一步成长的初级读者准备的,这一篇主要介绍与SQL优化相关的查询转换、访问路径、表间关系、半连接/反连接及并行等高级话题。本书还包含一个附录,主要是作者平时工作中一些小技巧的总结。

图书特色

Oracle数据库使用十分广泛,长期盘踞数据库使用排行榜首位。而SQL语句作为访问数据的接口语言,其运行效率的高低直接决定了数据库的整体性能。SQL语句优化本身覆盖面较广,涉及数据库领域的诸多方面,其中优化器部分尤为复杂。
本书作者根据多年的工作经验,围绕SQL优化这一核心主题,多角度阐述了SQL语句优化的各个方面。内容兼顾技术的深度和广度,结合大量案例,方便读者更好地了解SQL语句优化的本质。本书特别适合广大从事数据库开发工作的初中级读者阅读,可帮助这部分读者深入学习与SQL优化相关的原理方法和技巧,为以后的工作和进一步提高打下良好的基础。
本书既是一本不错的学习资料,也可作为案头必备的手册,供读者随时翻阅。

图书前言

为什么要写这本书
我早年毕业后,曾长期从事ERP、电子政务类软件的开发工作,作为一个数据库的使用者,我接触到了大量数据库,如FoxPro、SQL Server、Oracle、Informix……在不断的使用过程中,我对这一领域越来越感兴趣,并最终选择了数据库这条路。曾经长期担任DBA、数据库架构师等职,参与了大大小小很多项目的数据库设计、开发、优化工作,并在这一过程中积累了一些经验。在多年的工作中,我发现数据库领域存在一些现象。
现象一,开发人员将数据库视为“黑盒子”。开发人员不关心、不重视,也不了解SQL语句的执行情况、数据库的运行机理。甚至在很多O/R Mapping工具的辅助下,连基本的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语句优化感兴趣的人员;
大专院校计算机相关专业的学生。
如何阅读本书
本书分为四大部分:
第一部分为引入篇(第0~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工程师们!

韩 锋

上架指导

计算机\数据库

封底文字

Oracle数据库使用十分广泛,长期盘踞数据库使用排行首位。而SQL语句作为访问数据的接口语言,其运行效率的高低直接决定了数据库的整体性能。SQL语句优化本身覆盖面较广,涉及数据库领域的诸多方面,特别是优化器部分尤为复杂。
本书作者根据多年的工作经验,围绕SQL优化这一核心主题,多角度阐述了SQL语句优化的各个方面。内容兼顾技术的深度和广度,结合大量案例,方便读者更好地了解SQL语句优化的本质。本书特别适合于广大数据库开发的初中级者阅读,本书可帮助这部分深入学习与SQL优化相关的方法、技巧和原理,为以后的工作和进一步提高打下良好的基础。
此外,本书既是一本不错的学习资料,也可作为案头必备的手册随时翻阅。

作者简介

韩锋 著:暂无简介

图书目录

前 言
第一篇 引入篇
第0章 引言2
第1章 与SQL优化相关的几个案例4
案例1 一条SQL引发的血案4
案例2 糟糕的结构设计带来的问题6
案例3 规范SQL写法好处多9
案例4 “月底难过”11
案例5 COUNT(*)到底能有多快13
案例6 “抽丝剥茧”找出问题所在17
第二篇 原理篇
第2章 优化器与成本22
2.1 优化器22
2.1.1 基于规则的优化器23
2.1.2 基于成本的优化器25
2.1.3 对比两种优化器26
2.1.4 优化器相关参数27
2.1.5 优化器相关Hint30
2.2 成本35
2.2.1 基本概念35
2.2.2 计算公式36
2.2.3 计算示例36
第3章 执行计划40
3.1 概述40
3.1.1 什么是执行计划40
3.1.2 库执行计划存储方式42
3.2 解读执行计划43
3.2.1 执行顺序43
3.2.2 访问路径45
3.3 执行计划操作45
3.3.1 查看执行计划45
3.3.2 固定执行计划72
3.3.3 修改执行计划80
第4章 统计信息84
4.1 统计信息分类84
4.1.1 系统统计信息84
4.1.2 对象统计信息87
4.1.3 数据字典统计信息109
4.1.4 内部对象统计信息109
4.2 统计信息操作109
4.2.1 系统统计信息110
4.2.2 对象统计信息111
4.2.3 数据字典统计信息115
4.2.4 内部对象统计信息115
第5章 SQL解析与游标116
5.1 解析步骤116
5.2 解析过程117
5.3 游标示例119
第6章 绑定变量122
6.1 使用方法122
6.2 绑定变量与解析124
6.3 游标共享129
第7章 SQL优化相关对象131
7.1 表131
7.2 字段137
7.3 索引140
7.4 视图148
7.5 函数149
7.6 数据链(DB_LINK)150
第8章 SQL优化相关存储结构153
8.1 表空间153
8.2 段154
8.3 区155
8.4 块156
第9章 特有SQL160
9.1 MERGE160
9.2 INSERT ALL162
9.3 WITH162
9.4 CONNECT BY /START WITH163
第三篇 实战篇
第10章 查询转换166
10.1 查询转换的分类及说明166
10.2 查询转换—子查询类168
10.3 查询转换—视图类174
10.4 查询转换—谓词类178
10.5 查询转换—消除类180
10.6 查询转换—其他181
第11章 访问路径189
11.1 表访问路径189
11.1.1 全表扫描189
11.1.2 ROWID扫描193
11.1.3 采样扫描194
11.2 B树索引访问路径195
11.3 位图索引访问路径205
11.4 其他访问路径210
第12章 表间关联215
12.1 关联关系215
12.2 表关联实现方法218
12.3 嵌套循环连接220
12.4 排序合并连接226
12.5 哈希连接232
12.6 其他连接方式238
第13章 半连接与反连接243
13.1 半连接243
13.2 反连接246
第14章 排序250
14.1 引发排序的操作250
14.2 避免和减少排序251
14.2.1 优化原则及基本方法251
14.2.2 避免排序的示例252
14.3 排序过程及内存使用255
14.4 执行计划中的“Sort”258
第15章 子查询262
15.1 处理方式262
15.2 子查询分类263
15.2.1 按照语法分类263
15.2.2 按照谓词分类263
15.2.3 示例264
15.3 子查询优化266
15.4 子查询特殊问题272
15.4.1 空值问题272
15.4.2 OR问题274
15.4.3 [NOT] IN/EXISTS问题275
第16章 并行276
16.1 并行操作276
16.1.1 并行查询277
16.1.2 并行DML280
16.1.3 并行DDL283
16.2 并行级别286
16.3 并行原理286
16.3.1 从属进程286
16.3.2 粒度287
附录A 常用技巧290
附录B SQL优化参数295
附录C SQL优化数据字典298
附录D SQL优化等待事件300
附录E SQL优化提示303

教学资源推荐
作者: [美] 亚伯拉罕·西尔伯沙茨 (Abraham Silberschatz) [美] 亨利·F. 科思 (Henry F. Korth) [印] S. 苏达尔尚(S. Sudarshan) 著
作者: 周爱武 汪海威 肖云 编著
参考读物推荐
作者: Sumit Sarin 钟鸣 孙登峰
作者: (美)Donald K.Burleson