第1章 PostgreSQL概述 1
# O! G+ d5 M9 p0 _# t1.1 概述 1
; n+ x3 r/ \# W$ n. L5 q' P; n1.2 查询语句优化 3& Z/ V$ P6 i/ }1 d4 z* e0 G- Y) O
1.2.1 工具类语句 4
) Z# H, e& u* Z* V5 P5 ]1.2.2 查询类语句的处理 5* H; `. f5 Y8 \/ ^) b, T3 t: R( O# s
1.3 创建查询计划 8
4 t1 e) [1 t2 B( M# q6 O( w1.4 小结 8& }* q( X7 ^/ A* e% P6 c: E
第2章 基表数据结构 10) X. q/ c `; ~( F
2.1 概述 104 m* i1 }* ~( I/ X
2.2 数据结构 10
' j/ `. d3 g4 H* j( g' y2.2.1 查询树Query 11
9 \4 x' g t9 J- M2 J2.2.2 Select型查询语句SelectStmt 13* y8 t7 V/ t2 b: ]- a3 u d' Y) K
2.2.3 目标列项TargetEntry 152 u! ^5 S( f+ ]: ]$ Z9 e
2.2.4 From…Where…语句FromExpr 16
+ t9 X" u! _) @( O) y% Q2.2.5 范围表项RangeTblEntry/RangeTblRef 16" ]2 M9 ^/ d! N; ]
2.2.6 Join表达式JoinExpr 18/ M1 G+ O# t7 ` F; W* q
2.2.7 From语句中的子查询RangeSubSelect 19# y4 H, Q4 V+ s5 L r, t9 |6 }. J
2.2.8 子链接SubLink 20
3 ?4 m7 B0 R2 n# q2.2.9 子查询计划SubPlan 22) _2 M8 h) F6 W
2.2 小结 23# c1 H$ L1 R8 o2 l' K# a& K* w
2.3 思考 24* n- G' _0 R. T
第3章 查询分析 25: d8 T6 c, |. K/ b
3.1 概述 25
. e& b, m0 m0 o! ]- ?3.2 问题描述 25
' V+ R: W7 @' [3 a$ m- C K3.3 词法分析和语法分析(Lex&Yacc) 28% O/ ], X: w% \/ g: {& F/ O! `$ ]
3.3.1 概述 28
% n1 r% a% Q! O6 Y/ l1 M3.3.2 词法分析器Lex 28
: ~0 k& X( Z7 n ~! U3.3.3 语法分析器Yacc 30( s$ {; ]; B1 ^ C t
3.3.4 小结 36
& j) w& K4 X3 x/ C: n: E3.3.5 思考 36
5 o" R& T! o, ]3.4 抽象查询语法树AST 37
8 M6 J- Z' M' w7 G4 |0 {3.5 查询分析 39
# r& G) w5 W# x0 `: y( l3.5.1 概述 39
, Y+ }" _0 _$ ^ W- F9 ?3.5.2 查询分析—parse_analyze 400 {! O8 W6 E3 H! C
3.5.3 查询语句分析—transformStmt 42. g0 O- [0 R+ g8 n2 u H( {
3.6 查询重写 54
& h$ U6 X y* ^2 D3.6.1 概述 54
& l; G! m2 l7 v, s/ r, w$ G3 {3.6.2 查询重写——pg_rewrite_query 54
/ E; p; h3 O- V2 j7 O# c2 [3.7 小结 55
+ t3 \ _0 _! S; y( H3.8 思考 56
. N; J: T0 G/ I( k; C# Q9 o第4章 查询逻辑优化 57
# R/ _3 E+ C7 |! B) u! [1 J4.1 概述 57, n) [" n! `6 f. U9 p
4.2 预处理 57
4 S' k. i5 _1 E8 U) K4.2.1 xxx_xxx_walker/mutator的前世今生 59& g- G$ [% r) c- f' ~* k
4.2.3 对xxx_xxx_walker/mutator的思考 60
7 }0 {5 [, X- I# n) k) W4 e4.3 查询优化中的数据结构 61
/ ~2 O9 j3 I. l: _, @- {4.3.1 数据结构 62
6 G. N0 \/ q; D( y3 ^, D4.3.2 小结 80
0 \( S+ v- U9 s/ k% a$ w& y4.3.3 思考 810 x# a9 G2 N, C& X/ B! O/ O% M
4.4 查询优化分析 81
5 H1 p" [) C0 F* t4.4.1 逻辑优化——整体架构介绍 82: o; @0 r4 b8 I& J/ }
4.4.2 子查询优化——subquery_planner 88, x" t* Y& o* g6 i R+ g
4.4.3 创建分组等语句查询计划—grouping_planner 1428 z5 e+ D6 F+ C- H, n* x$ V/ i
4.4.4 创建查询访问路径—query_planner 150) x, W+ M; g: V8 k$ R4 @. F
4.4.5 小结 195
* R+ v. |+ {: z7 C4.4.6 思考 1962 `1 ?" u( I$ ?: J+ B" _+ T5 @
第5章 查询物理优化 198
2 W. i- y7 R9 v* z5 j' ^5.1 概述 198
" L$ R: p* w) j& c/ r" U9 \) c5.2 所有可行查询访问路径构成函数make_one_rel 200
; j5 @/ g3 |$ x0 L9 P Q t' a5.2.1 设置基表的物理参数 202
% b, r4 A! w1 a4 n( S7 J5.2.2 基表大小估计—set_rel_size 203
% ?2 J8 @4 M- q& i- b$ v5.2.3 寻找查询访问路径——set_base_rel_pathlists 214+ S+ K! m& f) w) ^4 v' {: @
5.2.4 添加查询访问路径—add_path 2471 ~! P6 O- \4 p6 X r
5.2.5 求解Join查询路径—make_rel_from_joinlist 255
# T% Q9 o% f- h+ p. I! C/ p5.2.6 构建两个基表之间连接关系—make_join_rel 267
* A% p4 B' x+ ?# x! m& x5.2.7 构建连接关系—build_join_rel 277
) G1 F: r1 Q& v1 k5.3 小结 2913 @9 j$ V& g# ?7 O; E
5.4 思考 2919 R% v; x" D. f9 k2 }* e, S
第6章 查询计划的生成 293
) |: c' p8 m3 [! Q- m, y6.1 查询计划的产生 293# O8 d o# k/ }1 D. D8 V. U
6.2 生成查询计划—create_plan/create_plan_recurse 2931 O7 V m( U% e+ ?, k; X; Z0 D( ]
6.2.1 构建Scan类型查询计划——create_scan_plan 295
d. E2 z3 ^6 v8 |" ?" t7 a6.2.2 构建Join类型查询计划——create_join_plan 300- s/ c; d% C1 k6 L* }
6.3 查询计划的阅读 305
, G. d2 ?7 u$ K) ]* p$ e' h. x6.4 小结 308
4 |! ?3 V# P) d W/ q! m6.5 思考 308
7 t& o' L7 I5 b9 u+ Kjava8.com
3 N6 n7 ]! i; E' B0 l' q) o0 A第7章 其他函数与知识点 310
, d) `2 J) e3 d- b' l% F9 g7.1 AND/OR规范化 310
' U5 O1 X. q# p9 y% I3 z2 F7 V7.2 常量表达式的处理—eval_const_expressions 314
- M8 X/ ]$ \' F. Q2 |2 K7.3 Relids的相关函数 316
3 |1 n3 M3 o0 |& Q N" h1 |( t7.4 List的相关函数 319. m1 k3 b$ H8 y! i
7.5 元数据表Meta Table 320
0 @7 |' Z: Y: K2 N4 b& H7.6 查询引擎相关参数配置 324 Y" \9 x# `+ ^. f
结束语 328
; `# b8 A9 T4 ^# q" d' M, v
; u! ]: o) H( B1 c( k4 Z