《数据库查询优化器的艺术 原理解析与SQL性能优化》PDF下载

  • 购买积分:16 如何计算积分?
  • 作  者:李海翔著
  • 出 版 社:北京:机械工业出版社
  • 出版年份:2014
  • ISBN:9787111447467
  • 页数:514 页
图书介绍:本书共19章,分为4个部分:第一部分(1~4章)主要介绍了查询优化器理论,包括数据库的查询优化、狭义查询优化的原理、狭义查询优化的关键算法、查询优化器与其他部分的关系等内容;第二部分(5~10章)深入剖析了PostgreSQL查询优化器的原理,包括PG的查询优化、查询优化相关的数据结构、查询优化器实现原理解析、PG查询优化的关键算法等内容;第三部分(11~16章)对MySQL查询优化器的原理进行了剖析,包括MySQL的查询优化、MySQL查询优化相关的数据结构、MySQL查询优化器实现原理等内容;第四部分(17~19章)对PG和MySQL查询优化器的异同进行了分析和比较,主要包括逻辑查询优化原理、物理查询优化原理、启发式规则的使用比较、集合操作的优化比较、设计思想的比较,等等。

第一篇 查询优化技术 2

第1章 数据管理系统的查询优化 2

1.1数据库调优 3

1.2查询优化技术 5

1.2.1查询重用 5

1.2.2查询重写规则 6

1.2.3查询算法优化 6

1.2.4并行查询优化 8

1.2.5分布式查询优化 9

1.2.6其他优化 9

1.3本章小结 9

第2章 逻辑查询优化 10

2.1查询优化技术的理论基础 10

2.1.1关系代数 11

2.1.2关系代数等价变换规则对优化的指导意义 13

2.2查询重写规则 17

2.2.1子查询的优化 18

2.2.2视图重写 28

2.2.3等价谓词重写 29

2.2.4条件化简 32

2.2.5外连接消除 33

2.2.6嵌套连接消除 37

2.2.7连接消除 38

2.2.8语义优化 40

2.2.9针对非SPJ的优化 41

2.3启发式规则在逻辑优化阶段的应用 42

2.4本章小结 43

第3章 物理查询优化 44

3.1查询代价估算 44

3.1.1代价模型 44

3.1.2选择率计算的常用方法 45

3.2单表扫描算法 45

3.2.1常用的单表扫描算法 45

3.2.2单表扫描代价计算 47

3.3索引 47

3.3.1如何利用索引 47

3.3.2索引列的位置对使用索引的影响 50

3.3.3联合索引对索引使用的影响 56

3.3.4多个索引对索引使用的影响 57

3.4两表连接算法 59

3.4.1基本的两表连接算法 59

3.4.2进一步认识两表连接算法 61

3.4.3连接操作代价计算 61

3.5多表连接算法 62

3.5.1多表连接顺序 62

3.5.2常用的多表连接算法 63

3.5.3多表连接算法的比较 68

3.6本章小结 68

第4章 查询优化器与其他模块的关系 70

4.1查询优化器整体介绍 70

4.2查询优化器与其他模块的关系 73

4.3本章小结 74

第二篇 PostgreSQL查询优化器原理解析 76

第5章PostgreSQL查询优化器概述 76

5.1 PostgreSQL查询执行过程 76

5.2 PostgreSQL查询优化器的 78

架构和设计思想 78

5.2.1 PostgreSQL查询优化器架构 79

5.2.2 PostgreSQL查询优化器的层次 81

5.2.3 PostgreSQL查询优化器设计思想 81

5.3主要概念 81

5.4代码层次结构 85

5.5本章小结 86

第6章PostgreSQL查询优化器相关数据结构 88

6.1主要数据结构 88

6.1.1基本数据结构 88

6.1.2查询树 91

6.1.3各种对象的结构 95

6.1.4连接操作相关的结构 99

6.1.5查询执行计划相关的结构 104

6.2各个结构之间的关系 108

6.3各个阶段间和主要结构体间的关系 109

6.4本章小结 110

第7章 PostgreSQL查询优化器实现原理解析 111

7.1查询优化整体流程 111

7.2查询优化器实现原理解析 115

7.2.1 planner——主入口函数 115

7.2.2 standard_planner——标准的查询优化器函数 116

7.2.3 subquery_planner——生成(子)查询执行计划函数 117

7.2.4 grouping_planner——生成查询执行计划并对非SPJ优化 139

7.2.5 build_minmax_path——聚集函数MIN/MAX的优化函数 141

7.2.6 query_planner——生成最优的查询路径函数 142

7.2.7 make_one_rel——构造多表连接路径并选出最优路径函数 148

7.2.8 make_rel_from_joinlist——生成多表连接路径函数 153

7.2.9 optimize_minmax_aggregates聚集操作MIN/MAX优化函数 163

7.2.10 create_plan——创建查询执行计划函数 164

7.2.11非SPJ处理——grouping_planner的各个子模块 166

7.2.12其他重要的函数与操作 170

7.3代价估算实现原理解析 174

7.3.1查询代价估算 174

7.3.2单表扫描方式的代价估算 174

7.3.3两表连接的代价估算 178

7.3.4其他代价估算函数 184

7.3.5选择率的计算 185

7.4从目录结构和文件功能角度看查询优化器 186

7.4.1查询优化子模块与主要文件的关系 187

7.4.2查询优化器代码结构 187

7.5本章小结 190

第8章 从功能的角度看PostgreSQL查询优化 192

8.1优化器之逻辑查询优化 192

8.1.1视图重写 193

8.1.2子查询优化 197

8.1.3等价谓词重写 209

8.1.4条件化简 209

8.1.5外连接消除 210

8.1.6嵌套连接消除 217

8.1.7连接的消除 218

8.1.8语义优化 221

8.1.9选择操作下推 226

8.1.10非SPJ优化 226

8.2优化器之物理查询优化 229

8.2.1 PostgreSQL的物理优化主要完成的工作 229

8.2.2启发式规则在物理查询优化阶段的使用 230

8.2.3两表连接 230

8.2.4代价估算 230

8.2.5 PostgreSQL的索引与查询优化 231

8.3其他 237

8.3.1 grouping_planner函数主干再分析 238

8.3.2用户指定的连接语义与PostgreSQL实现两表连接的函数及算法的关系 240

8.3.3集合操作优化 242

8.4本章小结 245

第9章 PostgreSQL查询优化的关键算法 246

9.1动态规划算法 246

9.1.1动态规划算法的处理流程 247

9.1.2紧密树处理流程 248

9.2遗传算法 248

9.2.1 PostgreSQL遗传算法的处理流程 248

9.2.2主要的数据结构 250

9.2.3主要的函数和变量 251

9.2.4应用遗传算法实现表连接的语义 253

9.2.5应用遗传算法计算适应度 254

9.2.6进一步理解PostgreSQL的遗传算法 255

9.3动态规划算法与遗传算法对比 256

9.4本章小结 257

第10章PostgreSQL查询优化器与其他部分的关系 259

10.1查询优化器与语法分析器 259

10.2查询优化器与执行器 260

10.3查询优化器与缓冲区管理模块 261

10.4查询优化器与对象访问模块 262

10.5查询优化器与统计模块 262

10.6查询优化器与索引模块 263

10.7本章小结 263

第三篇 MySQL查询优化器原理解析 266

第11章MySQL查询优化器概述 266

11.1 MySQL查询执行过程 266

11.2 MySQL查询优化器的架构和设计思想 267

11.2.1 MySQL查询优化器架构 268

11.2.2 MySQL查询优化器的层次 269

11.2.3 MySQL查询优化器设计思想 269

11.3主要概念 270

11.3.1常量表 270

11.3.2表数据的访问方式 270

11.4代码层次结构 272

11.5本章小结 274

第12章 MySQL查询优化器相关数据结构 275

12.1主要的类和数据结构 275

12.1.1查询树 275

12.1.2基本对象 276

12.1.3连接对象与执行计划 278

12.1.4代价估算类 281

12.2各个阶段主要结构体间的关系 282

12.3本章小结 282

第13章 MySQL查询优化器的原理解析 283

13.1查询优化器整体流程 283

13.2优化器的代码详解 285

13.2.1 JOIN.prep——优化前的准备工作 286

13.2.2 JOIN.optimize——优化器主入口方法 299

13.2.3 make_join_statistics——计算最优的查询优化执行计划 315

13.2.4 choose_table_order——求解多表连接最优连接路径 324

13.2.5 make_join_statistics函数的其他子函数 339

13.2.6 make_join_select——对条件求值、下推连接条件到表中 348

13.2.7 test_if_skip_sort_order——排序操作的优化 350

13.2.8 make_join_readinfo——为连接的每个表构造信息 351

13.2.9 JOIN。exec——执行查询执行计划的函数 353

13.3代价估算 354

13.3.1查询代价估算模型 354

13.3.2查询代价估算过程 355

13.3.3其他的代价估算 358

13.3.4对存储引擎的调用接口 362

13.3.5统计信息 364

13.4本章小结 365

第14章 从功能的角度看MySQL查询优化 366

14.1优化器之逻辑查询优化 366

14.1.1视图重写 367

14.1.2子查询优化 371

14.1.3等价谓词重写 387

14.1.4条件化简 388

14.1.5外连接消除 389

14.1.6嵌套连接消除 396

14.1.7连接的消除 398

14.1.8语义优化 400

14.1.9非SPJ优化 406

14.2优化器之物理查询优化 412

14.2.1 MySQL的物理优化主要完成的工作 412

14.2.2启发式规则在物理查询优化阶段的使用 413

14.2.3 MySQL的索引与查询优化 413

14.2.4用户指定的连接语义与MySQL实现两表连接的算法 417

14.3本章小结 418

第15章MySQL查询优化的关键算法 419

15.1深入理解MySQL的多表连接算法 419

15.2本章小结 424

第16章 MySQL查询优化器与其他部分的关系 425

16.1查询优化器与语法分析器 425

16.2查询优化器与执行器 426

16.3查询优化器与缓冲区管理模块 426

16.4查询优化器与索引模块 426

16.5本章小结 427

第四篇 PostgreSQL查询优化器VS MySQL查询优化器 430

第17章PostgreSQL和MySQL的逻辑查询优化技术 430

17.1查询重写 430

17.1.1子查询优化 430

17.1.2视图重写 443

17.1.3等价谓词重写 446

17.1.4条件化简 447

17.1.5外连接消除 448

17.1.6嵌套连接消除 449

17.1.7连接消除 451

17.1.8语义优化 452

17.2非SPJ的优化 452

17.3本章小结 456

第18章 PostgreSQL和MySQL的物理查询优化技术 457

18.1查询代价估算模型比较 457

18.2单表扫描算法 458

18.3索引 458

18.4两表连接算法 466

18.5多表连接算法 467

18.6本章小结 467

第19章PostgreSQL和MySQL的其他异同 468

19.1启发式规则的使用比较 468

19.2综合比较 469

19.2.1基本概念的比较 469

19.2.2数据结构的比较 469

19.2.3设计思想的比较 469

19.2.4编码规范的比较 470

19.3本章小结 471

附录A 如何掌握数据库内核 472

附录B 如何阅读本书 496

附录C 如何阅读查询执行计划 498

附录D 如何跟踪查询执行计划 508