如果评选出数据库中最难以理解的模块,那么非优化器莫属。作为数据库从业者,对优化器不够了解,如同猛虎没有了利爪,在对数据库调优的过程中往往余力不足。
数据库从业人员对优化器的掌握程度大致可以分成以下 3 个层次:
达到层次一只需要阅读一些基础理论,初学者对优化器的了解都处于这个层次,但这种了解对于实际应用的意义不大。要想达到层次三则需要细致地解读优化器的源代码,作为数据库专家是必须要掌握到这一层的,但这个过程又过于“艰辛”。更多的数据库程序员游走在两者之间,目的无非是在数据库调优过程中手到擒来地使用优化器查询,也就是这里的层次二。
那么,是否可以在不分析数据库内核源代码的情况下,从数据库使用者的角度出发,结合外在的系统表信息、参数信息、执行计划信息反向把优化器的原理讲清楚,从而确保大家进阶到层次二,掌握优秀的数据库开发人员必备的核心技能优化器呢?答案是肯定的,通过深入的挖掘数据库的元数据、参数、执行计划,再结合数据库优化器的相关理论,一定能把优化器的实现说清楚。
然而,我们选择哪种数据库的优化器实现呢?答案是 PostgreSQL 数据库。PostgreSQL 是世界上最先进的开源关系数据库。2018 年 Stack Overflow 数据库调查结果显示,PostgreSQL 流行度排名第三,仅次于 MySQL 和 SQL Server。
PostgreSQL 在过去几年不论是在功能方面还是性能方面,开发人员对产品的满意度都非常高,越来越多的数据库开发和运维人员开始使用 PostgreSQL。
而 PostgreSQL 查询优化器被广泛认为属于教科书级实现:
目前,单独针对优化器的课程很少,而能够做到深入浅出解读 PostgreSQL 优化器的课程更是凤毛麟角。