如果搞一个投票来评选数据库中最难以理解的模块,那么非优化器莫属。

作为数据库从业者,如果对优化器不够了解,便如同猛虎没有了利爪,苍鹰没有了翅膀,在对数据库数据库调优的过程中往往心有余而力不足。

从对优化器的掌握程度上来判断,数据库从业人员对优化器的理解大致可以分成以下 3 个层次。

层次一:粗浅了解,比如知道优化器分为逻辑优化和物理优化,了解一些逻辑优化的方法,知道执行计划的来源,能看懂优化器产生的执行计划。

层次二:详细了解,在粗浅了解的基础上,能够根据自己对优化器的了解,调整出优化器“喜爱”的 SQL
语句,并且对于产生的执行计划的优劣一目了然,知其然更知其所以然。

层次三:深度了解,需要对优化器的每个细节有清楚的认知,在我们写出一个 SQL
语句之后,可以庖丁解牛式地在脑海中浮现出语句在优化器中的优化过程,清楚地知道每个细节的实现过程。

要想达到层次一只需要阅读一些基础理论即可,通常,数据库初学者对优化器的了解都处于这个层次,但这种了解对于实际应用的意义不大。

而要想达到层次三则需要细致地解读优化器的源代码,虽然作为数据库专家是必须要掌握到这一层的,但这个过程又过于“艰辛”。

而大多数数据库从业人员游走在两者之间,大家的目标无非是在数据库调优过程中手到擒来地使用优化器查询,也就是这里的层次二。


那么,有没有办法在不分析数据库内核源代码的情况下,从数据库使用者的角度出发,结合外在的系统表信息、参数信息、执行计划信息反向把优化器的原理讲清楚,从而确保大家进阶到层次二,掌握优秀的数据库开发人员必备的核心技能优化器呢?

答案是肯定的,通过深入的挖掘数据库的元数据、参数、执行计划,再结合数据库优化器的相关理论,一定能把优化器的实现说清楚。

然而,我们选择哪种数据库的优化器实现呢?

答案是 PostgreSQL 数据库。PostgreSQL 是世界上先进的开源关系数据库。

2018 年 Stack Overflow 数据库调查结果显示,PostgreSQL 流行度排名第三,仅次于 MySQL 和 SQL Server。

PostgreSQL 在过去几年的发展动力十足。不论是在功能方面还是性能方面,开发人员对产品的满意度都非常高,越来越多的数据库开发和运维人员开始使用
PostgreSQL。

而 PostgreSQL 查询优化器被广泛认为属于教科书级实现。

首先,它的实现层次非常清楚,有明确的物理优化和逻辑优化的边界,各种优化规则也被抽象成完全独立的小模块,便于分析和理解。

其次,它对各种优化方法的支持也比较完备,对于常用的优化方法,都可以在 PostgreSQL 找到实践的案例。

另外,PostgreSQL 的优化器处理查询语句的能力更强,借助于优化之后的动态规划方法和遗传算法可以支持非常复杂的查询。

目前,单独针对优化器的课程很少,而能够做到深入浅出解读 PostgreSQL 优化器的课程更是凤毛麟角。

这里,非常荣幸地跟大家分享一下 GitChat 新上的《PostgreSQL 优化器入门》
<https://gitbook.cn/gitchat/column/5bbee9ed2409541174645a2d?utm_source=blogfeed181018>
课程。

我们邀请到了超过 13 年从业经验的 Pivotal 资深开发工程师、数据库内核专家张树杰老师手把手带领大家从 0 开始,直至熟练掌握 PostgreSQL
查询优化器实现全流程。
订购本课程可获得专属海报,分享专属海报并邀请一位好友购买,即可获得 25% 的现金返现,多邀多得,上不封顶,立即提现。

提现流程:请在 GitChat 服务号中点击“在线服务-我的邀请返现-提现”进行提现。

<>课程亮点

* 数据库内核专家通俗解读 PostgreSQL 优化器
* 无需阅读分析 PostgreSQL 源码即可快速掌握
* 分析优化器经典实现/数据库从业人员的核心技能
本课程从一个 SQL 语句的执行开始,逐步分析优化器中涉及的各种优化原则,从参数、系统表、执行计划开始说明,逐步由表及里、由外及内,把 PostgreSQL
优化器背后隐藏的优化思想一一列举出来,最终帮助读者透彻掌握 PostgreSQL 优化器的实现。

<>作者介绍

张树杰,Pivotal 资深开发工程师,数据库内核专家。拥有超过 13 年 IT
从业经验,多年从事国产数据库内核开发工作,近些年尤其专注于研究对分布式数据库的查询优化、查询执行的改进工作。

著有《PostgreSQL 技术内幕:查询优化深度探索》一书,目前从事 Greenplum 数据库的内核开发工作。


<>点此即刻订阅学习

友情链接
KaDraw流程图
API参考文档
OK工具箱
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:ixiaoyang8@qq.com
QQ群:637538335
关注微信