当前位置: 首页 > news >正文

PostgreSQL在何处处理 sql查询之十一

接前面,继续进行分析:

前面已经说过,在planner函数运行时,发生了实际物理磁盘访问。

/*****************************************************************************
 *
 *       Query optimizer entry point
 *
 * To support loadable plugins that monitor or modify planner behavior,
 * we provide a hook variable that lets a plugin get control before and
 * after the standard planning process.  The plugin would normally call
 * standard_planner().
 *
 * Note to plugin authors: standard_planner() scribbles on its Query input,
 * so you'd better copy that data structure if you want to plan more than once.
 *
 *****************************************************************************/
PlannedStmt *
planner(Query *parse, int cursorOptions, ParamListInfo boundParams)
{
    PlannedStmt *result;

    if (planner_hook)
        result = (*planner_hook) (parse, cursorOptions, boundParams);
    else
        result = standard_planner(parse, cursorOptions, boundParams);
    return result;
}

PlannedStmt *
standard_planner(Query *parse, int cursorOptions, ParamListInfo boundParams)
{
    ...
/* primary planning entry point (may recurse for subqueries) */
    top_plan = subquery_planner(glob, parse, NULL,
                                false, tuple_fraction, &root);
    ...
    top_plan = set_plan_references(root, top_plan);
    ...
    forboth(lp, glob->subplans, lr, glob->subroots)
    {
        Plan       *subplan = (Plan *) lfirst(lp);
        PlannerInfo *subroot = (PlannerInfo *) lfirst(lr);

        lfirst(lp) = set_plan_references(subroot, subplan);
    }
/* build the PlannedStmt result */
    result = makeNode(PlannedStmt);
    ...
    return result;
}

接着,要分析 subquery_planner

相关文章:

  • heartbeat 3.0集群(1)集群原理
  • 【乡巴佬】在Word中合理排列文本框与文本
  • c#类的初始化顺序
  • VIM使用系列:位置跳转和块模式
  • js字符串
  • oracle列表分区的ADD VALUES和DROP VALUES语句
  • python setattr,delattr()
  • 流程图控件FlowChart.NET组件的使用(二)
  • 企业架构研究总结(23)——TOGAF架构开发方法(ADM)之技术架构阶段
  • 图片闪烁效果
  • km itm监控启停命令记录
  • Bridge网络模式下Linux虚拟机和主机进行通信
  • IOS7为什么遭吐槽?
  • 学校电影服务器用 cwRsync实现windows下文件定时同步
  • 几段有用的代码
  • 时间复杂度分析经典问题——最大子序列和
  • 【刷算法】从上往下打印二叉树
  • 〔开发系列〕一次关于小程序开发的深度总结
  • Golang-长连接-状态推送
  • Java程序员幽默爆笑锦集
  • JS正则表达式精简教程(JavaScript RegExp 对象)
  • php面试题 汇集2
  • ReactNativeweexDeviceOne对比
  • Redis提升并发能力 | 从0开始构建SpringCloud微服务(2)
  • Tornado学习笔记(1)
  • WePY 在小程序性能调优上做出的探究
  • windows-nginx-https-本地配置
  • 案例分享〡三拾众筹持续交付开发流程支撑创新业务
  • 表单中readonly的input等标签,禁止光标进入(focus)的几种方式
  • 成为一名优秀的Developer的书单
  • 基于Android乐音识别(2)
  • 聊聊flink的BlobWriter
  • 前端技术周刊 2019-02-11 Serverless
  • 前端每日实战:61# 视频演示如何用纯 CSS 创作一只咖啡壶
  • 我的zsh配置, 2019最新方案
  • ​sqlite3 --- SQLite 数据库 DB-API 2.0 接口模块​
  • #git 撤消对文件的更改
  • #预处理和函数的对比以及条件编译
  • (02)Hive SQL编译成MapReduce任务的过程
  • (22)C#传智:复习,多态虚方法抽象类接口,静态类,String与StringBuilder,集合泛型List与Dictionary,文件类,结构与类的区别
  • (解决办法)ASP.NET导出Excel,打开时提示“您尝试打开文件'XXX.xls'的格式与文件扩展名指定文件不一致
  • (免费领源码)python#django#mysql校园校园宿舍管理系统84831-计算机毕业设计项目选题推荐
  • (一)SpringBoot3---尚硅谷总结
  • (一)搭建springboot+vue前后端分离项目--前端vue搭建
  • (转)ObjectiveC 深浅拷贝学习
  • (转)Unity3DUnity3D在android下调试
  • *++p:p先自+,然后*p,最终为3 ++*p:先*p,即arr[0]=1,然后再++,最终为2 *p++:值为arr[0],即1,该语句执行完毕后,p指向arr[1]
  • *p++,*(p++),*++p,(*p)++区别?
  • .bat批处理(七):PC端从手机内复制文件到本地
  • .bat批处理(一):@echo off
  • .NET Core SkiaSharp 替代 System.Drawing.Common 的一些用法
  • .NET Core中的去虚
  • .NET开源项目介绍及资源推荐:数据持久层
  • .net中我喜欢的两种验证码
  • .Net转Java自学之路—SpringMVC框架篇六(异常处理)