not in 优化_脑图-数据库查询优化器的艺术

这次阅读了《数据库查询优化器的艺术:原理解析与SQL性能优化》这本书,主要介绍数据库的查询优化,但是感觉这本书重复内容较多,在通过源码介绍PostgreSQL和MySQL的章节中,相对来说会更详细一些,但该部分感觉更适合直接阅读源码,因此,我在这里没有认真阅读,也是一览而过,也没有做总结。

这个脑图主要介绍原理部分,主要是书的第一个部分,包括逻辑优化和物理优化内容。

下表是Markdown格式的列表,后面接着是脑图。

# 查询优化

## 查询优化基础
### 查询重用
- cache
- 查询结果重用
- 查询计划重用
### 查询重写规则
- 逻辑优化
	- 语法级
	- 代数级
	- 语义级
- 物理级
### 查询优化算法
- 关系节点
	- 单表节点
	- 两表节点
	- 多表中间节点
- 查询策略
	- 基于规则优化
	- 基于代价优化
- 连接算法
	- SYSTEM-R算法
	- 启发式搜索算法
	- 贪婪算法
	- 动态规划算法
	- 遗传算法
### 并发查询优化
### 分布式查询优化

## 逻辑查询优化
### 理论基础
- 关系代数
	- 选择
	- 投影
	- 连接
		- 自然连接
		- 等值连接
		- 半连接
		- 反连接
		- (左/右/全)外连接
	- 除/并/交/差/积
### 查询重写规则
- 子查询优化
	- 子查询分类
		- 与外层关系
			- 相关子查询
			- 非相关子查询
				- 父子查询无关
		- 谓词
			- IN/ALL/ANY/SOME
			- EXISTS
		- 构成
			- SPJ
			- GROUPBY
		- 结果集
			- 标量子查询
			- 列子查询
			- 行子查询
			- 表子查询
	- 优化技术
		- 子查询合并
		- 子查询展开
			- 将简单查询(不包含聚集/GROUPBY/DISTINCT)的子查询
			- 重写为等价的多表连接操作
				- 需要确保展开后的DISTINCT属性,去重
				- IN
				- ALL/ANY/SOME
				- EXISTS
		- 聚集子查询消除
- 视图重写
	- SPJ简单视图
	- 非SPJ复杂视图
- 等价谓词重写
	- LIKE规则
		- LIKE 'Abc%' -> >='Abc' AND < 'Abd'
	- BETWEEN-AND规则
		- 与LIKE类似
	- IN转换OR规则
	- IN转换ANY规则
	- OR转换ANY规则
	- ALL/ANY转换集函数规则
		- 等价的MIN/MAX谓词
	- NOT规则
	- OR重写并集UNION规则
- 条件化简
	- HAVING条件并入WHERE条件
		- 不存在GROUPBY/聚集函数
	- 去除表达式中冗余的括号
	- 常量传递
	- 消除死码
	- 表达式计算
	- 等式变换
	- 不等式变换
	- 布尔表达式变换
		- 谓词传递闭包
		- 转换成等价的合取范式(CNF)
		- 索引的利用
- 外连接消除
	- 意义
		- 外连接操作时间多于内连接
		- 更灵活的表连接顺序
		- 块嵌套连接/索引循环连接将规模小作为外表,可以减少IO开销
	- 外连接转换
		- 内连接
			- Pairs
		- 左外连接
			- Pairs + LHS
		- 右外连接
			- Pairs + RHS
		- 全外连接
			- Pairs + LHS + RHS
	- 空值拒绝(reject-NULL)
		- 从结果中排除外连接右侧生成的值为NULL的行
		- 外连接的提供空值的一侧为另一侧的每行只返回一行
- 嵌套连接消除
	- 如只包含内连接,则表次序可以交换
	- 如包含外连接,表次序不可交换
- 连接消除
	- 主外键关系表连接,可消除主键表
	- 唯一键作为连接条件,三表内连接可去除中间表(只作为连接条件)
	- 可消除的表作为连接对象外,不出现在任何子句中
- 语义优化/语义转换
	- 连接消除
		- 推知简化操作
	- 连接引入
		- 使原关系变小/选择率降低
	- 谓词引入
		- 如引入基于索引的列,使查询更快
	- 检测空回答集
		- 谓词与约束相悖
	- 排序优化
		- 如有索引,排序操作可省略
	- 唯一性使用
- 非SPJ的优化
	- GROUPBY优化
		- 分组操作下移
			- 较大幅度地减少元组个数
		- 分组操作上移
			- 连标能过滤大部分元组
	- ORDERBY优化
		- 排序消除
			- 利用索引
		- 排序下推
	- DISTINCT优化
		- Distinct消除
		- Distinct推入
		- Distinct迁移

## 物理查询优化
### 查询代价估算
- 代价模型
	- IO代价+CPU代价
- 选择率常用方法
	- 无参数方法
	- 参数法
	- 曲线拟合法
	- 抽样法
	- 综合法
### 单表扫描算法
- 算法
	- 顺序扫描
	- 索引扫描
	- 只读索引扫描
	- 行扫描
	- 并行表扫描
	- 并行索引扫描
	- 组合多个索引扫描
- 代价估计
	- 顺序扫描
		- N_page*a_page_IO_time+N_tuple*a_tuple_CPU_time
	- 索引扫描
		- N_page_index*a_page_IO_time+N_tuple*a_tuple_CPU_time
### 索引
- 索引扫描
	- Seq Scan
	- Index Scan
	- Index only Scan
	- Bitmap Index Scan
- 索引列的位置
	- 目标列
		- 一般不使用索引
		- MAX/MIN可使用索引
	- Where/Join On
		- key <op> 常量
		- 可高效使用索引
	- GROUPBY
		- 一般不使用
	- HAVING
		- GROUPBY/HAVING子句包含索引列
	- ORDERBY
	- DISTINCT
- 联合索引
	- 前缀部分索引
- 多个索引
	- 选择相对简单的索引
### 两表连接算法
- 嵌套循环连接
	- 基于块的嵌套循环连接
- 排序归并连接
- Hash连接
	- 简单Hash连接
	- 优美Hash连接
	- 混合Hash连接
- 读取数据的趟数
### 多表连接算法
- 问题
	- 多表连接顺序
	- 多表连接的搜索空间
- 多表连接顺序
	- 连接树
	- 表连接搜索算法
		- 动态规划
		- 启发式方法
		- 贪婪算法
		- System R算法
			- 保存子树的最优查询计划和次优查询计划
		- 遗传算法
*XMind - Trial Version*

脑图

4a568e742d954ac2fcc60920f4c51a40.png

书目:《数据库查询优化器的艺术:原理解析与SQL性能优化》

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值