微信扫一扫,移动浏览光盘
简介
以内核开发人员的角度抽丝剥茧,带您深入浅出PostgreSQL查询引擎内核技术内幕。
目录
目 录
第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
第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
PostgreSQL查询引擎源码技术探析
- 名称
- 类型
- 大小
光盘服务联系方式: 020-38250260 客服QQ:4006604884
云图客服:
用户发送的提问,这种方式就需要有位在线客服来回答用户的问题,这种 就属于对话式的,问题是这种提问是否需要用户登录才能提问
Video Player
×
Audio Player
×
pdf Player
×