第1章 PostgreSQL概述 1
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 查询树Query 11
2.2.2 Select型查询语句SelectStmt 13
2.2.3 目标列项TargetEntry 15
2.2.4 From…Where…语句FromExpr 16
2.2.5 范围表项RangeTblEntry/RangeTblRef 16
2.2.6 Join表达式JoinExpr 18
2.2.7 From语句中的子查询RangeSubSelect 19
2.2.8 子链接SubLink 20
2.2.9 子查询计划SubPlan 22
2.2 小结 23
2.3 思考 24
第3章 查询分析 25
3.1 概述 25
3.2 问题描述 25
3.3 词法分析和语法分析(Lex&Yacc) 28
3.3.1 概述 28
3.3.2 词法分析器Lex 28
3.3.3 语法分析器Yacc 30
3.3.4 小结 36
3.3.5 思考 36
3.4 抽象查询语法树AST 37
3.5 查询分析 39
3.5.1 概述 39
3.5.2 查询分析―parse_analyze 40
3.5.3 查询语句分析―transformStmt 42
3.6 查询重写 54
3.6.1 概述 54
3.6.2 查询重写――pg_rewrite_query 54
3.7 小结 55
3.8 思考 56
第4章 查询逻辑优化 57
4.1 概述 57
4.2 预处理 57
4.2.1 xxx_xxx_walker/mutator的前世今生 59
4.2.3 对xxx_xxx_walker/mutator的思考 60
4.3 查询优化中的数据结构 61
4.3.1 数据结构 62
4.3.2 小结 80
4.3.3 思考 81
4.4 查询优化分析 81
4.4.1 逻辑优化――整体架构介绍 82
4.4.2 子查询优化――subquery_planner 88
4.4.3 创建分组等语句查询计划―grouping_planner 142
4.4.4 创建查询访问路径―query_planner 150
4.4.5 小结 195
4.4.6 思考 196
第5章 查询物理优化 198
5.1 概述 198
5.2 所有可行查询访问路径构成函数make_one_rel 200
5.2.1 设置基表的物理参数 202
5.2.2 基表大小估计―set_rel_size 203
5.2.3 寻找查询访问路径――set_base_rel_pathlists 214
5.2.4 添加查询访问路径―add_path 247
5.2.5 求解Join查询路径―make_rel_from_joinlist 255
5.2.6 构建两个基表之间连接关系―make_join_rel 267
5.2.7 构建连接关系―build_join_rel 277
5.3 小结 291
5.4 思考 291
第6章 查询计划的生成 293
6.1 查询计划的产生 293
6.2 生成查询计划―create_plan/create_plan_recurse 293
6.2.1 构建Scan类型查询计划――create_scan_plan 295
6.2.2 构建Join类型查询计划――create_join_plan 300
6.3 查询计划的阅读 305
6.4 小结 308
6.5 思考 308
第7章 其他函数与知识点 310
7.1 AND/OR规范化 310
7.2 常量表达式的处理―eval_const_expressions 314
7.3 Relids的相关函数 316
7.4 List的相关函数 319
7.5 元数据表Meta Table 320
7.6 查询引擎相关参数配置 324
结束语 328