基本信息
编辑推荐
以内核开发人员的角度抽丝剥茧,带您深入浅出PostgreSQL查询引擎内核技术内幕。
内容简介
计算机书籍
PostgreSQL作为当今最先进的开源关系型数据库,《PostgreSQL查询引擎源码技术探析》揭示PostgreSQL查询引擎的运行原理和实现技术细节,其中包括:基础数据结构;SQL词法语法分析及查询语法树;查询分析及查询重写;子链接及子查询处理;查询访问路径创建;查询计划生成,等等。以深入浅出的方式讨论每个主题并结合基础数据结构、图表、源码等对所讨论的主题进行详细分析,以使读者对PostgreSQL查询引擎的运行机制及实现细节能有全面且深入的认识。
《PostgreSQL查询引擎源码技术探析》适合从事数据库领域相关研究人员、高等院校相关专业高年级本科生或研究生阅读,也可作为高等院校的数据库原理课程的有益补充,还可作为业界数据库相关人员的案头图书。《PostgreSQL查询引擎源码技术探析》有助于读者理解数据查询引擎内核的技术内幕。
作译者
目录
1.1 概述 1
1.2 查询语句优化3
1.2.1 工具类语句 4
1.2.2 查询类语句的处理 5
1.3 创建查询计划8
1.4 小结 8
第2 章 基表数据结构 10
2.1 概述 10
2.2 数据结构 10
2.2.1 查询树Query11
2.2.2 Select 型查询语句SelectStmt 13
2.2.3 目标列项TargetEntry 15
2.2.4 From…Where…语句FromExpr 16
2.2.5 范围表项RangeTblEntry/RangeTblRef16
2.2.6 Join 表达式JoinExpr 18
2.2.7 From 语句中的子查询RangeSubSelect19
2.2.8 子链接SubLink 20
2.2.9 子查询计划SubPlan 22
2.2 小结 23
前言
虽然Oracle、MySQL广泛应用于国内外各大互联网公司的基础架构中,但作为另一款优秀的开源关系数据库,PostgreSQL同样也得到了各大互联网公司的持续关注;另外随着大数据平台对SQL标准支持的日益丰富,SQL on Hadoop的各种解决方案如雨后春笋般涌现,例如Hadoop Hive、Facebook Presto、Cloudera Impala等,这些SQL on Hadoop解决方案无一例外地需要一个表现优异的SQL查询引擎的支持。
作为数据库的大脑,查询引擎的优劣直接决定了数据库管理系统的好坏。不同的查询引擎对相同查询语句的处理策略可能截然不同,而其导致的执行效率也千差万别,少则相差数倍,多则数百倍。因此,认真地分析设计优秀的查询引擎并学习其查询优化方法可以使我们能够以"巨人肩膀之上"的方式来提升我们自己数据库产品的查询效率。
PostgreSQL作为一款优秀的开源关系型数据库管理系统,其源自U.C. Berkeley,带有浓郁的学术气息,数据库相关理论贯穿于整个PostgreSQL的设计和实现中,尤以查询引擎更甚。当前,无论中文或是英文资料,对PostgreSQL查询引擎的介绍非常稀缺,仅有的相关资料要么是限于整体框架性的介绍,要么是粗浅的概述性描述。对PostgreSQL查询引擎中较多的实现及其相对应的理论基础并无较为深入的讲解,这使得很多相关内核开发人员初次阅读查询引擎源码时存在许多的学习难点和疑点。例如,查询引擎在子链接处理时的理论依据;Lateral Join的处理方法;约束条件下推时需满足的条件;选择率对查询计划的影响等。而这也正是作者最初在阅读PostgreSQL查询引擎源码时所经历过的迷惑和不解。
本书的写作初衷正是为了加快数据库开发人员对PostgreSQL查询引擎的学习过程以及减少相关人员在源码学习中的迷惑,同时本书也为那些想一窥查询引擎究竟的DBA们提供一个相互学习的机会和渠道,无论你是MySQL DBA或是Oracle DBA。
读者定位
本书尝试以一种全新的角度给出对PostgreSQL查询引擎的分析,笔者作为一名数据库内核开发人员,了解内核开发人员关注的重点是什么。因此,本书以一位内核开发人员和架构师的角度来探讨如何设计并完成一个数据库查询引擎;数据库查询引擎在设计和实现过程中需要考虑哪些问题,又通过什么样的途径和方法来解决这些问题。例如,如何以数据结构来表示一条SQL查询语句?如何将SQL查询优化理论应用到查询引擎的实现中?相信读者在阅读本书后,能产生同样的思考。
本书主要面向的受众:首先是数据库内核开发人员。无论你是MySQL开发人员还是PostgreSQL开发人员,亦或是Infomix开发人员。一个优秀的查询引擎总是值得你花费一定的时间和精力进行研究并学习其设计和实现中的精华。其次,数据库DBA们同样也值得花费一定的时间和精力来阅读和研究查询引擎源码,所谓知彼知己,百战不殆。只有更好地了解内核中的理论基础和实现机制,我们才可能管理好数据库。最后,对于那些对数据库内核实现感兴趣的相关人员,无论您是经验丰富的老手还是初出茅庐的新手,我想本书也能够为想要了解PostgreSQL查询引擎的实现内幕的您提供一丝帮助。同样,对于高年级的本科生或是低年级的研究生,相信本书也可作为您学习数据库理论的有益补充。
当然,您在阅读本书之前还需要有一些必要的知识:对SQL标准有必要的认识和了解;了解数据库原理中的相关基本概念,例如查询计划、索引等;C/C++编程知识等。
本书组织
第1章以如何理解并执行查询语句为例,概括性地描述PostgreSQL查询引擎包含的相关模块以及各个模块的功能。
第2章从内核开发人员的角度出发重点介绍描述一条SQL查询语句需要的相关数据结构。
第3章主要讨论对一条SQL查询语句的识别以及相关知识,并以此为基础重点讨论将该字符串形式的SQL查询语句转为查询树的过程。
第4章将以第3章中所获得的查询树为基础,讨论如何对该查询树进行查询逻辑优化。例如,对SubLinks的优化处理,对SubQueries的处理,对表达式的优化,对约束条件的处理,对Lateral Join的处理,等等。
第5章以查询中涉及的基表的物理参数为基础,依据查询代价来计算查询语句的最优查询访问路径的方法,并对物理优化中使用的相关技术和理论基础进行详细的讨论和分析。例如,所有可行查询访问路径的求解策略,多表连接的处理策略,索引创建和选择的策略,物理代价相关参数的分析,等等。
第6章以第5章中所获得的最优查询访问路径为基础,重点讨论如何依据该查询访问路径构建执行引擎所需的查询计划。例如,顺序扫描查询计划的构建,连接关系查询计划构建等。
第7章主要分析我们在源码阅读过程中遇到的一些重要辅助函数。
错误说明
由于笔者水平有限,本书中会存在一定的错误,例如笔误、理解错误等,对于本书中出现的错误,读者可以在www.leehao.org中查询该错误的勘误信息,或者发送邮件至hom.lee@hotmail.com与作者联系。笔者非常希望能够与读者共同进步,共同推动国内数据库内核开发人员对PostgreSQL查询引擎的认识。相比MySQL而言,PostgreSQL的相关资料非常少,而专门介绍PostgreSQL查询引擎之类的资料则更加少,而这也是本书成书的原因。
学习资料
媒体评论
--赵伟 腾讯TDSQL数据库技术专家, 曾在Oracle,、TeraData等公司从事MySQL、Berkeley DB、PostgreSQL等数据库内核开发工作。对数据库理论有深入的研究和理解,在内核开发领域有着独特的见解和深厚的功力。
PostgreSQL作为一个优秀的数据库产品,其本身有着非常多值得学习和研究的地方。然而,目前介绍PostgreSQL的技术实现细节的书并不多,介绍其查询引擎的就更加少了。
《PostgreSQL查询引擎源码技术探析》作为一本专门介绍和研究PostgreSQL查询引擎的专著,显得很难得。它从源码入手,先提纲挈领,然后深入浅出地详细介绍了PostgreSQL查询引擎的架构、实现方法,以及蕴含在其中的各种技术。对于数据库理论的学习,内核的开发,以及数据库的使用都大有裨益。
作者作为我在北大方正结识的小伙伴。他深耕PostgreSQL多年,主要的研究都放在查询引擎部分,所以,我也不奇怪他能写出这样一本专著。本书中的字里行间更是透露着他深厚的理论功底以及扎实的实践基础。相信他以后还会不断地将自己的所得与大家分享,以飨各位。
--赖铮 MySQL技术专家,现任MySQL InnoDB团队任Principle Software Developer,曾供职于达梦、Teradata、北大方正等国内外知名数据库厂商,具有多年数据库内核研发经验,对数据库理论有着深入的研究和理解,在内核开发领域有着独特的见解和深厚的功力。