Postgre查询优化 --功能的角度优化分析

前言

前一篇文章已经从PG的数据结构等角度分析了PG的优化处理的源码细节,这节将从功能应用层面来对PG的查询优化进行分析。重点还是放到了逻辑查询优化功能上,分别针对,操作下推,谓词改造,语义转换,非SPJ优化等等内容。

PG查询优化器之逻辑查询优化

这里的逻辑优化是针对数据库常用的优化方案进行讲解,比如视图优化,操作下推等,下面就分模块的来详细的叙说。
视图重写
根据系统的查询规则,把查询修改为需要的规则传递给查询优化执行器。这个修改规则的过程就是视图重写的过程。从查询计划来分析,在视图的嵌套循环连接在单一视图不存在的情况下,视图被重写。
在这里插入图片描述
外连接操作,视图重写的过程
在这里插入图片描述
复杂视图连接的优化
在这里插入图片描述
子查询优化
通过子查询上拉达到简单的子查询优化的结果。下面先从PG的子连接优化对照表来分析
在这里插入图片描述
从子连接的查询计划来分析结果
在这里插入图片描述

子查询嵌套类型的优化
在这里插入图片描述

ANY类型的子连接优化
在这里插入图片描述

等价谓词重写
在这里插入图片描述
嵌套连接消除
在这里插入图片描述
消除主键表的连接
在这里插入图片描述

语义优化
在这里插入图片描述
选择操作下推
选择操作就是WHERE,JOIN,等的连接操作。
在这里插入图片描述

非SPJ优化
就是针对GROUPBY优化
在这里插入图片描述
同时出现ORDERBY的操作
在这里插入图片描述
在这里插入图片描述

DITINCT优化
在这里插入图片描述
代价估算
总代价 = 启动代价 + IO代价 + CPU代价,考虑脚本的优化从查询计划的节点树,再熬代价来分析,针对各种情况进行优化,

猜你喜欢

转载自blog.csdn.net/weixin_30947631/article/details/85940459
今日推荐