第1章 PostgreSQL概述 1
1.1 概述 1
1.2 查詢語句優(yōu)化 3
1.2.1 工具類語句 4
1.2.2 查詢類語句的處理 5
1.3 創(chuàng)建查詢計劃 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章 查詢邏輯優(yōu)化 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 查詢優(yōu)化中的數據結構 61
4.3.1 數據結構 62
4.3.2 小結 80
4.3.3 思考 81
4.4 查詢優(yōu)化分析 81
4.4.1 邏輯優(yōu)化――整體架構介紹 82
4.4.2 子查詢優(yōu)化――subquery_planner 88
4.4.3 創(chuàng)建分組等語句查詢計劃―grouping_planner 142
4.4.4 創(chuàng)建查詢訪問路徑―query_planner 150
4.4.5 小結 195
4.4.6 思考 196
第5章 查詢物理優(yōu)化 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規(guī)范化 310
7.2 常量表達式的處理―eval_const_expressions 314
7.3 Relids的相關函數 316
7.4 List的相關函數 319
7.5 元數據表Meta Table 320
7.6 查詢引擎相關參數配置 324
結束語 328