《数据库技术丛书·数据库查询优化器的艺术:原理解析与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 如何跟踪查询执行计划