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

可以看到内表t1的SeqScan算子扫描出8行记录,而排序Sort算子仅4个,难道不是应该8个元组都进行排序吗?
那我们得重新理解下rows这个字段的意义了。
1、merge join的操作
具体状态机可以参考:PostgreSQL/GreenPlum Merge Inner Join解密
我们以文章开头的例子继续进行说明:

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中进行展示:如下图所示

ExecMergeJoin每次从内表即Sort节点取一个数据,都会统计到Instr->tuplecount中。ExplainNode最终输出结果时,将Instr->tuplecount统计到instr->ntuples中。最终的rows值为ntuples/nloops,从执行计划中可以看到该算子仅进行了一次循环执行,即nloops为1。所以,可以这么理解:从Sort节点取出多少值,就会统计到rows中进行展示。
Rows的意义:子节点向父节点输出元组的个数,并不是子节点拥有的元组个数!
相关文章:
PgSQL内核机制 - 算子执行统计元组个数
PgSQL内核机制 - 算子执行统计元组个数 我们在执行explain analyze观察执行计划执行情况时,时常通过每个算子实际执行结果来分析SQL的执行,其中有一项“rows XXX”表示执行的行数(这里姑且先认为是执行的真实行数)。但有些场景下…...
Ubuntu/Linux 安装Paraview
文章目录 0. 卸载已有ParaView1. 安装ParaView1.1 下载后安装 2.进入opt文件夹改名3. 更改启动项4. 创建硬链接5. 添加桌面启动方式6. 即可使用 0. 卸载已有ParaView YUT 1. 安装ParaView https://www.paraview.org/ 1.1 下载后安装 找到下载的文件夹,文件夹内…...
内存泄漏及其解决方法
1. 系统崩溃前的现象 垃圾回收时间延长:从原本的约10ms增长至50ms,Full GC时间也由0.5s增加至4-5s。Full GC频率增加:最短间隔可缩短至1分钟内发生一次。年老代内存持续增长:即使经过Full GC,年老代内存未见明显释放。…...
Java进阶学习笔记13——抽象类
认识抽象类: 当我们在做子类共性功能抽取的时候,有些方法在父类中并没有具体的体现,这个时候就需要抽象类了。在Java中,一个没有方法体的方法应该定义为抽象方法,而类中如果有抽象方法,该类就定义为抽象类…...
【Docker学习】深入研究命令docker exec
使用docker的过程中,我们会有多重情况需要访问容器。比如希望直接进入MySql容器执行命令,或是希望查看容器环境,进行某些操作或访问。这时就会用到这个命令:docker exec。 命令: docker container exec 描述&#x…...
C语言中的文件操作
前言 嗨,我是firdawn,在本章中我们将介绍,文件的概念,文件的打开和关闭,在篇末我们将介绍文件缓冲区的作用,下面是本章的思维导图,接下来,让我们开始今天的学习吧! 一…...
python使用xlrd读取excel的时候把字符串读成了数字
xlrd 是一个 Python 库,用于读取 Excel 文件(.xls 和 .xlsx,但 .xlsx 需要 openpyxl 或 xlrd 的较新版本)。然而,xlrd 在读取 Excel 文件时通常会将单元格的内容按其原始数据类型(如字符串、数字、日期等&a…...
【C语言】走进指针世界(下卷)
前言 在“走进指针世界(上卷)”中,我们已经说过:什么是指针、内存和地址,指针的使用、声明、初始化,取地址运算符、解引用运算符以及这两者关系,还有指针赋值。 在正式使用指针进行各种代码的…...
【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:开启虚拟机、linux子系统、并下载ubuntu # 官方文档: https://learn.microsoft.com/zh-cn/windows/wsl/install wsl --install# 2、打开windows terminal,选ubuntu交互环境 # 第一次需要配置用户名和密码 # 接下来正常使用即可# 3、cud…...
如何处理时间序列的缺失数据
您是否应该删除、插入或估算? 世界上没有完美的数据集。每个数据科学家在数据探索过程中都会有这样的感觉: df.info()看到类似这样的内容: 大多数 ML 模型无法处理 NaN 或空值,因此如果您的特征或目标包含这些值,则在…...
fastapi中实现多个路由请求
大家伙,我是雄雄,欢迎关注微信公众号:雄雄的小课堂。 前言 最近在写机器人相关的接口,顺手学了学python,发现这是个好东西,写代码效率比java要高很多,比如写个词云呀,写个回调呀&am…...
前端框架选择指南:React vs Vue vs Angular
选择前端框架时,React、Vue 和 Angular 都是流行的选择,各有优缺点。我们可以从各个维度进行比较和选择: React 核心理念: 组件化开发,专注于视图层。学习曲线: 相对平缓,因为重点在于JSX和组…...
猫头虎 解析:为什么AIGC在国内适合做TOB,在国外适合做TOC?
猫头虎 解析:为什么AIGC在国内适合做TOB,在国外适合做TOC? 博主 猫头虎 的技术世界 🌟 欢迎来到猫头虎的博客 — 探索技术的无限可能! 专栏链接: 🔗 精选专栏: 《面试题大全》 — 面…...
并发编程笔记8--ThreadLocal结构详解
ThreadLocal,即线程变量,是一个以ThreadLocal对象为键,任意对象为值的存储结构。这个结构被附带在线程上,也就是说一个线程可以根据一个ThreadLocal对象查询到绑定在这个线程上的值。可以通过set(T)方法来设置一个值,在…...
强烈推荐 20.7k Star!企业级商城开源项目强烈推荐!基于DDD领域驱动设计模型,助您快速掌握技术奥秘,实现业务快速增长
更多资源请关注纽扣编程微信公众号 1 项目简介 商城是个从零到一的C端商城项目,包含商城核心业务和基础架构两大模块,推出用户、消息、商品、订单、优惠券、支付、网关、购物车等业务模块,通过商城系统中复杂场景,给出对应解决方案。使用 …...
【C++STL详解(四)------vector的模拟实现】
文章目录 vector各函数接口总览vector当中的成员变量介绍默认成员函数构造函数1构造函数2构造函数3拷贝构造函数赋值运算符重载函数析构函数 迭代器相关函数begin和end 容量和大小相关函数size和capacityreserveresizeempty 修改容器内容相关函数push_backpop_backinserterases…...
租赁系统|北京租赁系统|租赁软件开发流程
在数字化时代的浪潮下,小程序成为了各行各业争相探索的新领域。租赁行业亦不例外,租赁小程序的开发不仅提升了用户体验,更为商家带来了更多商业机会。本文将详细解析租赁小程序的开发流程,为有志于进军小程序领域的租赁行业从业者…...
Janus-Pro-7B结合Vue前端框架:构建现代化AI管理平台
Janus-Pro-7B结合Vue前端框架:构建现代化AI管理平台 最近在折腾一个AI模型管理平台,后台用的是性能不错的Janus-Pro-7B,前端选来选去,还是决定用Vue。原因很简单,Vue的生态成熟,上手快,组件库丰…...
文脉定序系统效果对比评测:与传统BM25算法的性能较量
文脉定序系统效果对比评测:与传统BM25算法的性能较量 最近在折腾一个技术文档的智能检索项目,发现一个挺有意思的现象:很多朋友一提到搜索排序,脑子里蹦出来的第一个词还是“BM25”。这算法确实经典,像信息检索领域的…...
BEYOND REALITY Z-Image精彩案例分享:无磨皮、无失真、通透肤质生成作品
BEYOND REALITY Z-Image精彩案例分享:无磨皮、无失真、通透肤质生成作品 1. 项目概述 BEYOND REALITY Z-Image是一款专注于高精度写实人像生成的AI创作引擎,基于Z-Image-Turbo底座和BEYOND REALITY SUPER Z IMAGE 2.0 BF16专属模型打造。这个模型专门针…...
IDEA2023.3.4新UI不习惯?教你一键切换回经典风格(附Java环境配置技巧)
IDEA 2023.3.4 新UI切换指南与Java开发环境深度配置 作为一名常年与IntelliJ IDEA打交道的开发者,每次IDE大版本更新都像拆盲盒——既期待新功能又担心操作习惯被颠覆。2023.3.4版本带来的New UI确实让不少老用户感到措手不及,特别是那些从2010年代就开始…...
借助爱毕业aibiye的智能算法,论文中的相似内容可被自动优化,结合学术标准调整,确保低重复率
嘿,大家好!我是AI菌。今天咱们来聊聊一个让无数学生头疼的问题:论文重复率飙到30%以上怎么办?别慌,我这就分享5个实用降重技巧,帮你一次搞定,轻松压到合格线以下。这些方法都是我亲身试验过的&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…...
新手也能懂的红队实战:从零搭建红日靶场到内网渗透完整复盘(附环境包)
红队实战入门:从零构建红日靶场到内网渗透全流程解析 环境准备与靶场搭建 红日靶场作为国内知名的渗透测试学习环境,其设计模拟了真实企业内网架构,包含Web服务器、域控服务器和域成员主机。对于初学者而言,正确搭建环境是后续所有…...
不用装软件!这款MicroPython浏览器 IDE :让你在手机上也能调试树莓派 Pico拐
1、普通的insert into 如果(主键/唯一建)存在,则会报错 新需求:就算冲突也不报错,用其他处理逻辑 回到顶部 2、基本语法(INSERT INTO ... ON CONFLICT (...) DO (UPDATE SET ...)/(NOTHING)) 语…...
从零组装一台能联网的电脑:手把手记录我的南邮电装实习全过程(含BIOS设置与网络配置)
从零组装一台能联网的电脑:手把手记录我的南邮电装实习全过程 第一次亲手组装电脑的体验,远比想象中更令人兴奋。作为电子信息工程专业的学生,这次电装实习让我从理论走向实践,完整经历了从零配件到联网主机的全过程。如果你也和我…...
TMC4671电机驱动调试避坑指南:从SPI通信失败到电机抖动的实战排查
TMC4671电机驱动调试避坑指南:从SPI通信失败到电机抖动的实战排查 调试TMC4671电机驱动芯片时,工程师常会遇到各种"坑"和"雷区"。本文将聚焦实际调试过程中最常见的问题,提供一套从现象到原因的逆向排查方法,…...
