数据库技术丛书 数据库查询优化器的艺术 原理解析与SQL性能作者:李海翔 著出版时间:2014丛编项: 数据库技术丛书内容简介 《数据库技术丛书·数据库查询优化器的艺术:原理解析与SQL性能优化》是数据库查询优化领域的里程碑之作,由Oracle公司MySQL全球开发团队、资深专家撰写,作者有10余年数据库内核和查询优化器研究经验。数据库领域泰斗王珊教授亲自作序推荐,PostgreSQL中国社区和中国用户会发起人以及来自Oracle、新浪、网易、华为等企业的数位资深数据库专家联袂推荐。从原理角度深度解读和展示数据库查询优化器的技术细节和全貌;从源码实现角度全方位深入分析MySQL和PostgreSQL两大主流开源数据库查询优化器的实现原理;从工程实践的角度对比了两大数据库的查询优化器的功能异同和实现异同。它是所有数据开发工程师、内核工程师、DBA以及其他数据库相关工作人员值得反复研读的一本书。《数据库技术丛书·数据库查询优化器的艺术:原理解析与SQL性能优化》共19章,分为四个部分:第一篇(第1~4章)对数据库查询优化技术的范围、逻辑查询优化、物理查询优化,以及查询优化器与其他模块的关系做了非常细致、深入的讲解;第二篇(第5~10章)首先从源码角度对PostgreSQL查询优化器的架构、层次、设计思想、相关数据结构和实现原理进行了深入、系统的分析,然后从功能角度对PostgreSQL的逻辑查询优化、物理查询优化、查询优化器的关键算法,以及PostgreSQL查询优化器与其他模块的关系做了深入的讲解;第三篇(第11~16章)首先从源码角度对MySQL查询优化器的架构、层次、设计思想、相关数据结构和实现原理进行了深入、系统的分析,然后从功能角度对MySQL的逻辑查询优化、物理查询优化、查询优化器的关键算法,以及MySQL查询优化器与其他模块的关系做了深入的讲解;第四篇(第17~19章)对PostgreSQL与MySQL的逻辑查询优化技术、物理查询优化技术、设计思想和编码规范等各方面进行了深度的比较。目录推荐序一推荐序二前言第一篇 查询优化技术第1章 数据管理系统的查询优化1.1 数据库调优1.2 查询优化技术1.2.1 查询重用1.2.2 查询重写规则1.2.3 查询算法优化1.2.4 并行查询优化1.2.5 分布式查询优化1.2.6 其他优化1.3 本章小结第2章 逻辑查询优化2.1 查询优化技术的理论基础2.1.1 关系代数2.1.2 关系代数等价变换规则对优化的指导意义2.2 查询重写规则2.2.1 子查询的优化2.2.2 视图重写2.2.3 等价谓词重写2.2.4 条件化简2.2.5 外连接消除2.2.6 嵌套连接消除2.2.7 连接消除2.2.8 语义优化2.2.9 针对非SPJ的优化2.3 启发式规则在逻辑优化阶段的应用2.4 本章小结第3章 物理查询优化3.1 查询代价估算3.1.1 代价模型3.1.2 选择率计算的常用方法3.2 单表扫描算法3.2.1 常用的单表扫描算法3.2.2 单表扫描代价计算3.3 索引3.3.1 如何利用索引3.3.2 索引列的位置对使用索引的影响3.3.3 联合索引对索引使用的影响3.3.4 多个索引对索引使用的影响3.4 两表连接算法3.4.1 基本的两表连接算法3.4.2 进一步认识两表连接算法3.4.3 连接操作代价计算3.5 多表连接算法3.5.1 多表连接顺序3.5.2 常用的多表连接算法3.5.3 多表连接算法的比较3.6 本章小结第4章 查询优化器与其他模块的关系4.1 查询优化器整体介绍4.2 查询优化器与其他模块的关系4.3 本章小结第二篇 PostgreSQL查询优化器原理解析第5章 PostgreSQL查询优化器概述5.1 PostgreSQL查询执行过程5.2 PostgreSQL查询优化器的架构和设计思想5.2.1 PostgreSQL查询优化器架构5.2.2 PostgreSQL查询优化器的层次5.2.3 PostgreSQL查询优化器设计思想5.3 主要概念5.4 代码层次结构5.5 本章小结第6章 PostgreSQL查询优化器相关数据结构6.1 主要数据结构6.1.1 基本数据结构6.1.2 查询树6.1.3 各种对象的结构6.1.4 连接操作相关的结构6.1.5 查询执行计划相关的结构6.2 各个结构之间的关系6.3 各个阶段间和主要结构体间的关系6.4 本章小结第7章 PostgreSQL查询优化器实现原理解析7.1 查询优化整体流程7.2 查询优化器实现原理解析7.2.1 planner--主入口函数7.2.2 standard_planner--标准的查询优化器函数7.2.3 subquery_planner--生成(子)查询执行计划函数7.2.4 grouping_planner--生成查询执行计划并对非SPJ优化7.2.5 build_minmax_path--聚集函数MIN/MAX的优化函数7.2.6 query_planner--生成最优的查询路径函数7.2.7 make_one_rel--构造多表连接路径并选出最优路径函数7.2.8 make_rel_from_joinlist--生成多表连接路径函数7.2.9 optimize_minmax_aggregates--聚集操作MIN/MAX优化函数7.2.10 create_plan--创建查询执行计划函数7.2.11 非SPJ处理--grouping_planner的各个子模块7.2.12 其他重要的函数与操作7.3 代价估算实现原理解析7.3.1 查询代价估算7.3.2 单表扫描方式的代价估算7.3.3 两表连接的代价估算7.3.4 其他代价估算函数7.3.5 选择率的计算7.4 从目录结构和文件功能角度看查询优化器7.4.1 查询优化子模块与主要文件的关系7.4.2 查询优化器代码结构7.5 本章小结第8章 从功能的角度看PostgreSQL查询优化8.1 优化器之逻辑查询优化8.1.1 视图重写8.1.2 子查询优化8.1.3 等价谓词重写8.1.4 条件化简8.1.5 外连接消除8.1.6 嵌套连接消除8.1.7 连接的消除8.1.8 语义优化8.1.9 选择操作下推8.1.10 非SPJ优化8.2 优化器之物理查询优化8.2.1 PostgreSQL的物理优化主要完成的工作8.2.2 启发式规则在物理查询优化阶段的使用8.2.3 两表连接8.2.4 代价估算8.2.5 PostgreSQL的索引与查询优化8.3 其他8.3.1 grouping_planner函数主干再分析8.3.2 用户指定的连接语义与PostgreSQL实现两表连接的函数及算法的关系8.3.3 集合操作优化8.4 本章小结第9章 PostgreSQL查询优化的关键算法9.1 动态规划算法9.1.1 动态规划算法的处理流程9.1.2 紧密树处理流程9.2 遗传算法9.2.1 PostgreSQL遗传算法的处理流程9.2.2 主要的数据结构9.2.3 主要的函数和变量9.2.4 应用遗传算法实现表连接的语义9.2.5 应用遗传算法计算适应度9.2.6 进一步理解PostgreSQL的遗传算法9.3 动态规划算法与遗传算法对比9.4 本章小结第10章 PostgreSQL查询优化器与其他部分的关系10.1 查询优化器与语法分析器10.2 查询优化器与执行器10.3 查询优化器与缓冲区管理模块10.4 查询优化器与对象访问模块10.5 查询优化器与统计模块10.6 查询优化器与索引模块10.7 本章小结第三篇 MySQL查询优化器原理解析第11章 MySQL查询优化器概述11.1 MySQL查询执行过程11.2 MySQL查询优化器的架构和设计思想11.2.1 MySQL查询优化器架构11.2.2 MySQL查询优化器的层次11.2.3 MySQL查询优化器设计思想11.3 主要概念11.3.1 常量表11.3.2 表数据的访问方式11.4 代码层次结构11.5 本章小结第12章 MySQL查询优化器相关数据结构12.1 主要的类和数据结构12.1.1 查询树12.1.2 基本对象12.1.3 连接对象与执行计划12.1.4 代价估算类12.2 各个阶段主要结构体间的关系12.3 本章小结第13章 MySQL查询优化器的原理解析13.1 查询优化器整体流程13.2 优化器的代码详解13.2.1 JOIN.prepare--优化前的准备工作13.2.2 JOIN.optimize--优化器主入口方法13.2.3 make_join_statistics--计算最优的查询优化执行计划13.2.4 choose_table_order--求解多表连接最优连接路径13.2.5 make_join_statistics函数的其他子函数13.2.6 make_join_select--对条件求值、下推连接条件到表中13.2.7 test_if_skip_sort_order--排序操作的优化13.2.8 make_join_readinfo--为连接的每个表构造信息13.2.9 JOIN.exec--执行查询执行计划的函数13.3 代价估算13.3.1 查询代价估算模型13.3.2 查询代价估算过程13.3.3 其他的代价估算13.3.4 对存储引擎的调用接口13.3.5 统计信息13.4 本章小结第14章 从功能的角度看MySQL查询优化14.1 优化器之逻辑查询优化14.1.1 视图重写14.1.2 子查询优化14.1.3 等价谓词重写14.1.4 条件化简14.1.5 外连接消除14.1.6 嵌套连接消除14.1.7 连接的消除14.1.8 语义优化14.1.9 非SPJ优化14.2 优化器之物理查询优化14.2.1 MySQL的物理优化主要完成的工作14.2.2 启发式规则在物理查询优化阶段的使用14.2.3 MySQL的索引与查询优化14.2.4 用户指定的连接语义与MySQL实现两表连接的算法14.3 本章小结第15章 MySQL查询优化的关键算法15.1 深入理解MySQL的多表连接算法15.2 本章小结第16章 MySQL查询优化器与其他部分的关系16.1 查询优化器与语法分析器16.2 查询优化器与执行器16.3 查询优化器与缓冲区管理模块16.4 查询优化器与索引模块16.5 本章小结第四篇 PostgreSQL查询优化器VSMySQL查询优化器第17章 PostgreSQL和MySQL的逻辑查询优化技术17.1 查询重写17.1.1 子查询优化17.1.2 视图重写17.1.3 等价谓词重写17.1.4 条件化简17.1.5 外连接消除17.1.6 嵌套连接消除17.1.7 连接消除17.1.8 语义优化17.2 非SPJ的优化17.3 本章小结第18章 PostgreSQL和MySQL的物理查询优化技术18.1 查询代价估算模型比较18.2 单表扫描算法18.3 索引18.4 两表连接算法18.5 多表连接算法18.6 本章小结第19章 PostgreSQL和MySQL的其他异同19.1 启发式规则的使用比较19.2 综合比较19.2.1 基本概念的比较19.2.2 数据结构的比较19.2.3 设计思想的比较19.2.4 编码规范的比较19.3 本章小结附录A 如何掌握数据库内核附录B 如何阅读本书附录C 如何阅读查询执行计划附录D 如何跟踪查询执行计划 上一篇: 深入学习MongoDB [(美) Kristina Chodorow] 下一篇: Redis实战 [(美)约西亚 L.卡尔森(Josiah L. Carlson)]