欢迎光临
免费的PDF电子书下载网站

PostgreSQL技术内幕:查询优化深度探索 PDF下载

编辑推荐

囊括源码解析、架构分析、关键细节、一线案例

深入浅出全面解读了PostgreSQL查询优化器

作者是数据库内核研发领域的一个老兵

拥有十多年一线数据库开发经验

对数据库内核各个方面都有研究

书中凝结了其对数据库的深刻理解

彭煜玮、周正中(德哥Digoal)倾情作序

蚂蚁金服、JD、*等业内专家力荐

不懂优化器不能算懂数据库

PostgreSQL优化器是一种教科书式的实现

值得数据库技术人员深入研究

 ;

内容简介

 ;  ; 查询优化器是数据库中很重要的模块之一,只有掌握好查询优化的方法且了解查询优化的细节,在对数据库调优的过程中才能有的放矢,否则调优的过程就如无本之木、无源之水,虽上下求索而不得其法。

 ;  ; 《PostgreSQL技术内幕:查询优化深度探索》揭示了PostgreSQL数据库中查询优化的实现技术细节,首先对子查询提升、外连接消除、表达式预处理、谓词下推、连接顺序交换、等价类推理等逻辑优化方法进行了详细描述,然后结合统计信息、选择率、代价对扫描路径创建、路径搜索方法、连接路径建立、Non-SPJ路径建立、执行计划简化与生成等进行了深度探索,使读者对PostgreSQL数据库的查询优化器有深层次的了解。

 ;  ; 《PostgreSQL技术内幕:查询优化深度探索》适合数据库内核开发人员及相关领域的研究人员、数据库DBA、高等院校相关专业的本科生或者研究生阅读。

作者简介

 ;  ; 张树杰,北京大学工程管理硕士。2005年—2011年,从事安全相关的工作,涉及入侵检测、数据库审计、虚拟桌面等等。2011年—2015年,北京人大金仓信息技术股份有限公司,从事数据库内核开发工作。2015年—至今,天津神舟通用数据技术有限公司北京分公司,从事数据库内核开发工作及团队管理工作。

PostgreSQL技术内幕:查询优化深度探索 PDF下载

目录

第1章 概述 1
1.1 查询优化的简介 1
1.2 逻辑优化 3
1.2.1 关系模型 3
1.2.2 逻辑优化示例 8
1.3 物理优化 10
1.3.1 物理优化的4个“法宝” 12
1.3.2 物理路径的生成过程 14
1.4 文件介绍 17
1.5 示例的约定 18
1.6 小结 19

第2章 查询树 20
2.1 Node的结构 20

媒体评论

作为开源关系数据库领域先进技术的代表,PostgreSQL近年来受到越来越多人的关注,尤其是它的优化器,称得上是一种教科书式的实现。树杰的《PostgreSQL技术内幕:查询优化深度探索》全面解读了PostgreSQL优化器,从关系代数基本原理到PostgreSQL优化器实现中用到的主要数据结构及函数,都进行了准确细致的说明,同时条理清晰地描述了基于规则的查询改写、基于统计信息和代价计算的计划选择、动态规划算法、基因算法等。对于希望学习和深入了解PostgreSQL优化器的同学,本书是一本非常好的教材和参考书。
——蚂蚁金服基础数据部资深专家 蒋志勇

查询优化器是数据库的大脑,它生成的执行计划的优劣直接决定了数据库的性能。读者通过本书,可以深入理解和掌握PostgreSQL这个优秀开源数据库的优化器,更可以推而广之去理解和掌握其他数据库的优化器。在此基础上,如果能再去思考如何创新,那么本书作者的努力就得到超额回报了。
——*云云数据库首席架构师 文继军

前沿

为什么写这本书

我参加过很多次查询优化的培训,也查阅过很多查询优化的资料,但总是感觉对查询优化似懂而非,我总结其原因是多数培训和资料的时长或篇幅较短,内容多是对查询优化的概述,“巧妙”地避开了查询优化的难点,难以触及查询优化的本质,导致查询优化的“大道理”人人都懂,遇到问题却难以发力。

2016年年末,我做了一次查询优化的培训,结合之前培训的经验,我对这次查询优化的培训打了一个“持久战”,不只是拿出几个小时的时间对查询优化进行一个总体描述,而是将查询优化器拆解开来,分阶段地进行详细的解读,大约做了十几次培训,最终的效果是非常显著的。在培训的过程中我发现,目前PostgreSQL数据库查询优化器实现细节相关的资料市场上少之又少,和数据库从业人员对查询优化器的热情远远不成正比,本着抛砖引玉的原则,我写了这本书。

为什么阅读这本书

√ 在数据库内核开发的过程中,你是否有了解查询优化器的实现细节的欲望?

√ 在对数据库进行调优的过程中,你是否感觉无从下手?

√ 在分析查询优化的源码时,你是否会陷入某一细节而不可自拔?

√ 在学习查询优化的理论时,你是否感觉理论与实践之间无法一一对应?

如果你希望深入地了解查询优化,那么最好的办法就是了解它的理论基础,然后细致地剖析查询优化器的源代码,通过理论和实践的结合,达到真正掌握相关知识的目的。本书细致地解读了PostgreSQL 10.0的查询优化器的大部分源码,对其中比较重要的理论都给出了说明,足以让读者了解PostgreSQL数据库查询优化器的全貌。

虽然本书已经尽量尝试将复杂问题简单化,但是鉴于PostgreSQL数据库的查询优化器的实现本身就具有一定的复杂性,读者阅读的过程可能是“痛苦”的,但请相信“梅花香自苦寒来”,只要坚持阅读就能收获很多。

本书的组织结构

本书的组织结构基本是按照PostgreSQL数据库的查询优化器处理一个查询的流程来安排的,由简入繁、由易入难。

第1章介绍一些查询优化基础理论,这些理论是对查询优化的概述,读者在阅读第1章时可以参考一些经典的数据库实现理论书籍,更详细地了解数据库的基本理论,这样能给后面的阅读打好基础。

第2章介绍查询树,查询树是PostgreSQL数据库查询优化器的输入,查询优化器本身是对查询树的等价改造及等价分解。

第3章介绍逻辑重写优化,逻辑重写优化是逻辑优化的一部分,它主要是对查询树进行基于规则的等价重写,比较重要的有子查询提升、表达式预处理、外连接消除等。

第4章介绍逻辑分解优化,逻辑分解优化仍然是逻辑优化的一部分,和逻辑重写优化不同,它开始尝试分解查询树,经过谓词下推、连接顺序交换、等价类推理等对查询树进行改造。

第5章介绍统计信息和选择率,统计信息是代价计算的基石,因此了解统计信息的类型、了解选择率的含义对代价计算有非常重要的意义。

第6章介绍扫描路径的建立过程,扫描路径是为了对基表进行扫描的物理算子创建的路径,它负责将物理存储或者缓存中的数据读取上来并进行处理,通常包括顺序扫描、索引扫描、位图扫描等。

第7章介绍路径搜索的两个算法,PostgreSQL数据库采用了动态规划方法和遗传算法进行路径搜索,本书对这两种方法的实现都做了详细的介绍。

第8章介绍连接路径的建立过程,PostgreSQL数据库的物理连接路径有嵌套循环连接、哈希连接、归并连接等,由于采用的扫描路径不同,导致同一种类型的物理连接路径产生的代价不同。

第9章介绍Non-SPJ的相关优化,PostgreSQL数据库对集合操作、聚集操作、分组操作、排序操作等都做了优化处理。

第10章介绍执行计划的生成,在扫描路径、连接路径及Non-SPJ路径分别处理之后,会选择一个“最优”的连接树,PostgreSQL数据库需要将这个连接树修正成执行计划树。

错误

限于我的能力,书中难免有错误,在写作的过程中我也尝试尽量多查阅相关的资料,尽量避免错误的出现,但是相关的资料实在是太少了,因此,欢迎广大读者对本书提出纠正、批评和意见,这也有益于我本身能力的提升。

致谢

感谢彭煜玮、周正中(德哥Digoal)为本书作序,感谢蒋志勇、文继军、王颖泽、杨瑜、赵殿奎对本书的评价,这对我是极大的鼓励。

在写作过程中,卢栋栋、彭信东、李茂增通读了大部分书稿,给出了很多有益的意见和建议,在此表示感谢。林文、翁燕青、白洁对书稿的格式及内容提出了修改建议,在此一并表示感谢。

感谢董英编辑,在写稿及后续的审校过程中董英编辑一直在和我沟通,不厌其烦地解答我的各种问题。

感谢我的家人。我的父母和妻子在我写作的过程中给予了极大的支持,写作的过程非常枯燥,他们为我提供了最好的写作环境。另外我的两个儿子也经常在我离开电脑的间隙帮我修改书稿,虽然他们的意见一条也没有被采纳,但这里仍然对他们的“贡献”表示感谢。

免费在线读

序一

查询可以说是数据库管理系统中最关键、最吸引人的功能之一,每一个生产数据库系统每天都需要处理大量的各类查询,为了让这些查询运行得更快、更好,数据库管理系统的查询优化器中包含了大量的优化技术,这些优化技术是很多研究者和技术人员数十年钻研和探索总结出来的精华。不论是数据库管理系统的开发者还是数据库应用的开发者,学习理解查询优化技术都大有裨益。

作为最先进的开源对象关系型数据库管理系统,PostgreSQL及其源代码无疑是学习和体会查询优化技术的最佳平台。除此之外,高质量技术书籍也是研究查询优化技术必不可少的武器。本书结合PostgreSQL的查询优化器源代码,深入分析了一个查询进入PostgreSQL之后一步步被查询优化器转换成一个可执行的、优化后的执行计划的全过程。为了让读者更容易理解,本书还配备了大量的实例来讲解,确实是一部值得一读的好书。

身为一名PostgreSQL爱好者和数据库研究人员,我感到无比幸福和自豪—据我有限的知识,全球仅有几本分析PostgreSQL内核的书籍,而它们全都出自中国作者之手。希望今后有更多、更好的此类书籍面世,也祝愿中国的数据库技术和产品有朝一日能够走向世界。

彭煜玮

2018.4.25于珞珈山

 

序二

中国有句古话,“巧妇难为无米之炊”,说的是再好的主妇,在没有给任何食材的情况下也做不出可口的饭菜。反过来,什么样的主妇算得上“巧妇”呢?如果给你准备好了烹调所需的所有食材,你能做出可口的饭菜吗?

数据库是一个比较神奇的软件,我们都知道可以用SQL和数据库沟通,让数据库处理SQL和让主妇做饭是一样的道理,数据库能不能及时响应SQL请求,能不能用最优的计划完成SQL请求,取决于数据库本身提供了哪些“料”,以及数据库打算怎么“烹调”用户提交的SQL。例如,一个简单查询SQL,数据库的扫描方法(我暂且把它称为数据库的“料”之一)就有全表扫描、索引扫描、位图扫描、跳跃扫描等。一个SQL中包括了多个函数、表达式时,数据库先处理哪个表达式或函数,又或者在什么时候处理这些表达式或函数呢?数据库“烹调”一条SQL时,如何“烹调”,如何分解,是靠什么来做决定的?在数据库决定了怎么做之后,又是如何按部就班地执行的?如果说数据库的“扫描方法、表达式、操作符、UDF、索引接口”等是数据库的“料”,那么数据库的优化器就是“巧妇”之手,它包括了“JOIN算法、SQL重写规则、多表JOIN的遗传算法、动态路径规划、选择性算法、各种NODE的成本计算算法、成本因子、并行计算成本算法”等方方面面,为数据库如何执行SQL提供了全套流程。

PostgreSQL作为一个非常经典的ORDBMS,包含了很多“料”,同时有着非常先进的优化器,为高效地执行SQL提供了良好的基础。

本书作者长期致力于数据库内核的研发,有非常丰富的理论与实践经验,本书以PostgreSQL为背景,详细介绍了PostgreSQL查询优化器中的核心概念,从“查询树、SQL重写、UNION 优化、逻辑分解”到“下推、JOIN、选择性、统计信息、扫描路径、动态规划、遗传算法”等方方面面,实为作者呕心沥血之作,同时也是数据库工作者,特别是PGer之福。

本书是不可多得的教科书级PostgreSQL内核读物,同时不乏实战性。建议想了解数据库优化器工作原理的读者及PostgreSQL爱好者深入学习。

感谢作者为PostgreSQL生态的辛勤付出,期待本书大卖。

PGer,Digoal

PostgreSQL技术内幕:查询优化深度探索 pdf下载声明

本pdf资料下载仅供个人学习和研究使用,不能用于商业用途,请在下载后24小时内删除。如果喜欢,请购买正版

pdf下载地址

版权归出版社和作者所有,下载链接已删除。如果喜欢,请购买正版!

链接地址:PostgreSQL技术内幕:查询优化深度探索