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

PgSQL内核机制 - 算子执行统计元组个数

PgSQL内核机制 - 算子执行统计元组个数

我们在执行explain analyze观察执行计划执行情况时,时常通过每个算子实际执行结果来分析SQL的执行,其中有一项“rows = XXX”表示执行的行数(这里姑且先认为是执行的真实行数)。但有些场景下,比如MergeJoin,如下:

5cdb7d6272cac5c04b13e3fe8e8e7362.png

可以看到内表t1的SeqScan算子扫描出8行记录,而排序Sort算子仅4个,难道不是应该8个元组都进行排序吗?

那我们得重新理解下rows这个字段的意义了。

1、merge join的操作

具体状态机可以参考:PostgreSQL/GreenPlum Merge Inner Join解密

我们以文章开头的例子继续进行说明:

3fc252f7f87ad3c31d5d8e5d14b62405.png

1)先取外表t2的1;然后取内表1进行join条件判断

2)两者相等,标记内表位置1

3)取内表下一个值2,并保存到mj_InnerTupleSlot中,外表值1和内表2进行比较:1 < 2

4)取外表下一个值2,和标记位置1进行比较,2 > 1,则继续和内表当前保存的mj_InnerTupleSlot值进行比较

5)两者相等,标记内表位置2

6)取内表下一个值3,并将其保存到mj_InnerTupleSlot;外表2和内表3比较:2 < 3

7)取外表下一个值3,和内表标记位置2比较:3 > 2,继续和内表保存值mj_InnerTupleSlot比较:3 = 3

8)继续取内表下一个值4。外表3和内表4比较:3 < 4

9)外表值取完,终止join

可以从流程中看到,从内表只取出了4个值。这个正好和rows字段值匹配。也就是从子节点拿多少数据,rows输出多大值。

我们从代码中查看下是否是这样。

2、rows统计

结构体Instrumentation中的tuplecount输出到explain analyze中进行展示:如下图所示

420cb31afc7fe87e931942a37dcc349f.png

ExecMergeJoin每次从内表即Sort节点取一个数据,都会统计到Instr->tuplecount中。ExplainNode最终输出结果时,将Instr->tuplecount统计到instr->ntuples中。最终的rows值为ntuples/nloops,从执行计划中可以看到该算子仅进行了一次循环执行,即nloops为1。所以,可以这么理解:从Sort节点取出多少值,就会统计到rows中进行展示。

Rows的意义:子节点向父节点输出元组的个数,并不是子节点拥有的元组个数!

相关文章:

PgSQL内核机制 - 算子执行统计元组个数

PgSQL内核机制 - 算子执行统计元组个数 我们在执行explain analyze观察执行计划执行情况时&#xff0c;时常通过每个算子实际执行结果来分析SQL的执行&#xff0c;其中有一项“rows XXX”表示执行的行数&#xff08;这里姑且先认为是执行的真实行数&#xff09;。但有些场景下…...

Ubuntu/Linux 安装Paraview

文章目录 0. 卸载已有ParaView1. 安装ParaView1.1 下载后安装 2.进入opt文件夹改名3. 更改启动项4. 创建硬链接5. 添加桌面启动方式6. 即可使用 0. 卸载已有ParaView YUT 1. 安装ParaView https://www.paraview.org/ 1.1 下载后安装 找到下载的文件夹&#xff0c;文件夹内…...

内存泄漏及其解决方法

1. 系统崩溃前的现象 垃圾回收时间延长&#xff1a;从原本的约10ms增长至50ms&#xff0c;Full GC时间也由0.5s增加至4-5s。Full GC频率增加&#xff1a;最短间隔可缩短至1分钟内发生一次。年老代内存持续增长&#xff1a;即使经过Full GC&#xff0c;年老代内存未见明显释放。…...

Java进阶学习笔记13——抽象类

认识抽象类&#xff1a; 当我们在做子类共性功能抽取的时候&#xff0c;有些方法在父类中并没有具体的体现&#xff0c;这个时候就需要抽象类了。在Java中&#xff0c;一个没有方法体的方法应该定义为抽象方法&#xff0c;而类中如果有抽象方法&#xff0c;该类就定义为抽象类…...

【Docker学习】深入研究命令docker exec

使用docker的过程中&#xff0c;我们会有多重情况需要访问容器。比如希望直接进入MySql容器执行命令&#xff0c;或是希望查看容器环境&#xff0c;进行某些操作或访问。这时就会用到这个命令&#xff1a;docker exec。 命令&#xff1a; docker container exec 描述&#x…...

C语言中的文件操作

前言 嗨&#xff0c;我是firdawn&#xff0c;在本章中我们将介绍&#xff0c;文件的概念&#xff0c;文件的打开和关闭&#xff0c;在篇末我们将介绍文件缓冲区的作用&#xff0c;下面是本章的思维导图&#xff0c;接下来&#xff0c;让我们开始今天的学习吧&#xff01; 一…...

python使用xlrd读取excel的时候把字符串读成了数字

xlrd 是一个 Python 库&#xff0c;用于读取 Excel 文件&#xff08;.xls 和 .xlsx&#xff0c;但 .xlsx 需要 openpyxl 或 xlrd 的较新版本&#xff09;。然而&#xff0c;xlrd 在读取 Excel 文件时通常会将单元格的内容按其原始数据类型&#xff08;如字符串、数字、日期等&a…...

【C语言】走进指针世界(下卷)

前言 在“走进指针世界&#xff08;上卷&#xff09;”中&#xff0c;我们已经说过&#xff1a;什么是指针、内存和地址&#xff0c;指针的使用、声明、初始化&#xff0c;取地址运算符、解引用运算符以及这两者关系&#xff0c;还有指针赋值。 在正式使用指针进行各种代码的…...

【Spring】SSM整合_入门代码实现

1. Maven依赖 在pom.xml中添加SSM框架的依赖 <!-- Spring Core --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.3.x</version> </dependency>…...

C++代码错误解决1(函数模板)

1、代码如下 //示例函数模板的使用 #include <iostream> #include <string> using namespace std; template <typename T>//函数模板 T max(T a,T b) {return a>b?a:b; } int main() {int a,b;cout<<"input two integers to a&b:"…...

idea configuration 配置 方便本地启动环境切换

idea 再项目启动的时候避免切换环境导致上线的时候出现环境配置问题 可以再idea 的 configuration 中配置项目的 vm options 虚拟机的内容占用 -Xmx256m -Xms256m -Xmn100m -Xss256k program arguments properties 文件中需要修改的配置参数 active profiles 指定启动的本…...

win10配置wsl的深度学习环境

# 1、一步完成wsl&#xff1a;开启虚拟机、linux子系统、并下载ubuntu # 官方文档: https://learn.microsoft.com/zh-cn/windows/wsl/install wsl --install# 2、打开windows terminal&#xff0c;选ubuntu交互环境 # 第一次需要配置用户名和密码 # 接下来正常使用即可# 3、cud…...

如何处理时间序列的缺失数据

您是否应该删除、插入或估算&#xff1f; 世界上没有完美的数据集。每个数据科学家在数据探索过程中都会有这样的感觉&#xff1a; df.info()看到类似这样的内容&#xff1a; 大多数 ML 模型无法处理 NaN 或空值&#xff0c;因此如果您的特征或目标包含这些值&#xff0c;则在…...

fastapi中实现多个路由请求

大家伙&#xff0c;我是雄雄&#xff0c;欢迎关注微信公众号&#xff1a;雄雄的小课堂。 前言 最近在写机器人相关的接口&#xff0c;顺手学了学python&#xff0c;发现这是个好东西&#xff0c;写代码效率比java要高很多&#xff0c;比如写个词云呀&#xff0c;写个回调呀&am…...

前端框架选择指南:React vs Vue vs Angular

选择前端框架时&#xff0c;React、Vue 和 Angular 都是流行的选择&#xff0c;各有优缺点。我们可以从各个维度进行比较和选择&#xff1a; React 核心理念&#xff1a; 组件化开发&#xff0c;专注于视图层。学习曲线&#xff1a; 相对平缓&#xff0c;因为重点在于JSX和组…...

猫头虎 解析:为什么AIGC在国内适合做TOB,在国外适合做TOC?

猫头虎 解析&#xff1a;为什么AIGC在国内适合做TOB&#xff0c;在国外适合做TOC&#xff1f; 博主 猫头虎 的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面…...

并发编程笔记8--ThreadLocal结构详解

ThreadLocal&#xff0c;即线程变量&#xff0c;是一个以ThreadLocal对象为键&#xff0c;任意对象为值的存储结构。这个结构被附带在线程上&#xff0c;也就是说一个线程可以根据一个ThreadLocal对象查询到绑定在这个线程上的值。可以通过set(T)方法来设置一个值&#xff0c;在…...

强烈推荐 20.7k Star!企业级商城开源项目强烈推荐!基于DDD领域驱动设计模型,助您快速掌握技术奥秘,实现业务快速增长

更多资源请关注纽扣编程微信公众号 1 项目简介 商城是个从零到一的C端商城项目&#xff0c;包含商城核心业务和基础架构两大模块,推出用户、消息、商品、订单、优惠券、支付、网关、购物车等业务模块&#xff0c;通过商城系统中复杂场景&#xff0c;给出对应解决方案。使用 …...

【C++STL详解(四)------vector的模拟实现】

文章目录 vector各函数接口总览vector当中的成员变量介绍默认成员函数构造函数1构造函数2构造函数3拷贝构造函数赋值运算符重载函数析构函数 迭代器相关函数begin和end 容量和大小相关函数size和capacityreserveresizeempty 修改容器内容相关函数push_backpop_backinserterases…...

租赁系统|北京租赁系统|租赁软件开发流程

在数字化时代的浪潮下&#xff0c;小程序成为了各行各业争相探索的新领域。租赁行业亦不例外&#xff0c;租赁小程序的开发不仅提升了用户体验&#xff0c;更为商家带来了更多商业机会。本文将详细解析租赁小程序的开发流程&#xff0c;为有志于进军小程序领域的租赁行业从业者…...

Janus-Pro-7B结合Vue前端框架:构建现代化AI管理平台

Janus-Pro-7B结合Vue前端框架&#xff1a;构建现代化AI管理平台 最近在折腾一个AI模型管理平台&#xff0c;后台用的是性能不错的Janus-Pro-7B&#xff0c;前端选来选去&#xff0c;还是决定用Vue。原因很简单&#xff0c;Vue的生态成熟&#xff0c;上手快&#xff0c;组件库丰…...

文脉定序系统效果对比评测:与传统BM25算法的性能较量

文脉定序系统效果对比评测&#xff1a;与传统BM25算法的性能较量 最近在折腾一个技术文档的智能检索项目&#xff0c;发现一个挺有意思的现象&#xff1a;很多朋友一提到搜索排序&#xff0c;脑子里蹦出来的第一个词还是“BM25”。这算法确实经典&#xff0c;像信息检索领域的…...

BEYOND REALITY Z-Image精彩案例分享:无磨皮、无失真、通透肤质生成作品

BEYOND REALITY Z-Image精彩案例分享&#xff1a;无磨皮、无失真、通透肤质生成作品 1. 项目概述 BEYOND REALITY Z-Image是一款专注于高精度写实人像生成的AI创作引擎&#xff0c;基于Z-Image-Turbo底座和BEYOND REALITY SUPER Z IMAGE 2.0 BF16专属模型打造。这个模型专门针…...

IDEA2023.3.4新UI不习惯?教你一键切换回经典风格(附Java环境配置技巧)

IDEA 2023.3.4 新UI切换指南与Java开发环境深度配置 作为一名常年与IntelliJ IDEA打交道的开发者&#xff0c;每次IDE大版本更新都像拆盲盒——既期待新功能又担心操作习惯被颠覆。2023.3.4版本带来的New UI确实让不少老用户感到措手不及&#xff0c;特别是那些从2010年代就开始…...

借助爱毕业aibiye的智能算法,论文中的相似内容可被自动优化,结合学术标准调整,确保低重复率

嘿&#xff0c;大家好&#xff01;我是AI菌。今天咱们来聊聊一个让无数学生头疼的问题&#xff1a;论文重复率飙到30%以上怎么办&#xff1f;别慌&#xff0c;我这就分享5个实用降重技巧&#xff0c;帮你一次搞定&#xff0c;轻松压到合格线以下。这些方法都是我亲身试验过的&a…...

你的终端神器之Oh My Zsh扰

1.安装环境准备 1.1.查看物理内存 [rootaiserver ~]# free -m 1.2.操作系统版本 [rootaiserver ~]# cat /etc/redhat-release 1.3.操作系统内存 [rootaiserver ~]# df -h /dev/shm/ 1.4.磁盘空间 [rootaiserver ~]# df -TH [rootaiserver ~]# df -h /tmp/ [rootaiserver ~]# d…...

新手也能懂的红队实战:从零搭建红日靶场到内网渗透完整复盘(附环境包)

红队实战入门&#xff1a;从零构建红日靶场到内网渗透全流程解析 环境准备与靶场搭建 红日靶场作为国内知名的渗透测试学习环境&#xff0c;其设计模拟了真实企业内网架构&#xff0c;包含Web服务器、域控服务器和域成员主机。对于初学者而言&#xff0c;正确搭建环境是后续所有…...

不用装软件!这款MicroPython浏览器 IDE :让你在手机上也能调试树莓派 Pico拐

1、普通的insert into 如果&#xff08;主键/唯一建&#xff09;存在&#xff0c;则会报错 新需求&#xff1a;就算冲突也不报错&#xff0c;用其他处理逻辑 回到顶部 2、基本语法&#xff08;INSERT INTO ... ON CONFLICT (...) DO (UPDATE SET ...)/(NOTHING)&#xff09; 语…...

从零组装一台能联网的电脑:手把手记录我的南邮电装实习全过程(含BIOS设置与网络配置)

从零组装一台能联网的电脑&#xff1a;手把手记录我的南邮电装实习全过程 第一次亲手组装电脑的体验&#xff0c;远比想象中更令人兴奋。作为电子信息工程专业的学生&#xff0c;这次电装实习让我从理论走向实践&#xff0c;完整经历了从零配件到联网主机的全过程。如果你也和我…...

TMC4671电机驱动调试避坑指南:从SPI通信失败到电机抖动的实战排查

TMC4671电机驱动调试避坑指南&#xff1a;从SPI通信失败到电机抖动的实战排查 调试TMC4671电机驱动芯片时&#xff0c;工程师常会遇到各种"坑"和"雷区"。本文将聚焦实际调试过程中最常见的问题&#xff0c;提供一套从现象到原因的逆向排查方法&#xff0c;…...