PostgreSQL查询优化器--逻辑查询优化--子查询优化(一)
来源:互联网 发布:linux 中文输入法安装 编辑:程序博客网 时间:2024/06/14 03:00
对于不可优对应可化的子查询,PostgreSQL处理不相关子查询时,会为该子查询创建InitPlan;当处理相关子查询相关时,会为该子查询创建SubPlan。
PostgreSQL支持子查询的优化,只是把子查询细分为两种情况:
子链接(sublink):子查询的特例,只是子查询语句嵌入在表达式中。
子查询(subquery):子查询语句不嵌入在表达式中,独立存在于SQL语句中。
这两种情况的细分,使得PostgreSQL能够更为细腻地处理子查询。PostgreSQL对于子查询,通常的优化方式是尽量采取“拉平”方式的操作,把子查询合并到父查询中,其目的是在多表连接时能利用多表连接算法进行表顺序选择的优化。
子查询和子链接的区别
PostgreSQL对于子查询的处理,区分为子链接和子查询二种情况,二者首先在定义上存在差别,这在第6章已经介绍了。从代码的角度看,二者也有着明显的不同,主要不同之处如下:
调用的函数不同。子链接,使用pull_up_sublinks函数完成子链接的上拉的优化;子查询,使用pull_up_subqueries函数完成子查询的上拉的优化。
函数处理的情况不同。pull_up_sublinks函数调用pull_up_sublinks_jointree_recurse函数,递归处理四种情况:一是pull_up_sublinks_jointree_recurse函数入口参数jtnode为NULL;二是jtnode参数为RangeTblRef类型;三是jtnode参数为FromExpr类型;四是jtnode参数为JoinExpr类型。而pull_up_subqueries函数递归调用自己处理三种情况:一是jtnode参数为RangeTblRef类型;二是jtnode参数为FromExpr类型;三是jtnode参数为JoinExpr类型。pull_up_sublinks函数和pull_up_subqueries函数同样是处理结点RangeTblRef类型、FromExpr类型、JoinExpr类型三种情况,侧重点却不同,对比如表8-2所示。
函数处理的结果不同。递归调用的最终结果,反映在了对于范围表(RangeTblRef)的处理,上拉子链接和上拉子查询对范围表的处理方式不同。
![PostgreSQL查询优化器--逻辑查询优化--子查询优化(一) - 那海蓝蓝 - 那海蓝蓝的博客 PostgreSQL查询优化器--逻辑查询优化--子查询优化(一) - 那海蓝蓝 - 那海蓝蓝的博客](http://img0.ph.126.net/pB8a2kWa1P6sBjUTXQeB1Q==/3670996646360400477.jpg)
- PostgreSQL查询优化器--逻辑查询优化--子查询优化(一)
- PostgreSQL查询优化器--逻辑查询优化--子查询优化(二)
- PostgreSQL查询优化器--逻辑查询优化--子查询优化(三)
- PostgreSQL查询优化器--逻辑查询优化--视图优化(一)
- PostgreSQL查询优化器--逻辑查询优化--视图优化(一)
- MySQL查询优化器--逻辑查询优化技术(二)--子查询优化(二)
- MySQL查询优化器--逻辑查询优化技术(二)--子查询优化(三)
- MySQL查询优化器--逻辑查询优化技术(二)--子查询优化(四)
- MySQL查询优化器--逻辑查询优化技术(二)--子查询优化
- PostgreSQL查询优化器--逻辑查询优化--视图优化(二)
- PostgreSQL查询优化器--逻辑查询优化--视图优化(三)
- SQL优化--逻辑优化--子查询优化(MySQL)
- PostgreSQL查询优化器--逻辑优化功能篇--目录
- PostgreSQL查询优化:查询条件优化一(条件分类)
- PostgreSQL查询优化简介
- PostgreSQL的查询优化
- MySQL查询优化器--逻辑查询优化技术(五)--外连接的消除(一)
- MySQL查询优化器--逻辑查询优化技术(一)--视图重写
- PostgreSQL查询优化器--逻辑查询优化--视图优化(二)
- 数据库使用经验---面对大数据背景
- PostgreSQL查询优化器--逻辑查询优化--视图优化(三)
- 开源数据库的编译---MySQL的编译(For MySQL V5.6.12)
- Spring EL表示式的运用@Value
- PostgreSQL查询优化器--逻辑查询优化--子查询优化(一)
- 迎接2014---跨年礼物送给各位朋友
- PostgreSQL查询优化器--逻辑查询优化--子查询优化(二)
- MySQL使用索引优化DISTINCT操作
- PostgreSQL查询优化器--逻辑查询优化--子查询优化(三)
- PostgreSQL查询优化器--逻辑优化功能篇--目录
- 跨进程传递数据的做法
- 数据库查询优化器的艺术:原理解析与SQL性能优化
- Android App压力测试(Monkey和ADB)