BitmapIndex Scan 与BitmapHeap Scan

  • BitmapIndex Scan 与BitmapHeap Scan

BitmapIndex Scan 与Index Scan 很相似,都是基于索引的扫描,但是BitmapIndex Scan 节点每次执行返回的是一个位图而不是一个元组,其中位图中每位代表了一个扫描到的数据块。而BitmapHeap Scan一般会作为BitmapIndex Scan 的父节点,将BitmapIndex Scan 返回的位图转换为对应的元组。这样做最大的好处就是把Index Scan 的随机读转换成了按照数据块的物理顺序读取,在数据量比较大的时候,这会大大提升扫描的性能。

我们可以运行set enable_indexscan =off; 来指定关闭Index Scan ,上文中Index Scan 中SQL 的EXPLAIN 输出结果则变为:

postgres=> explain(ANALYZE,VERBOSE,BUFFERS) select * from class where st_no=2;QUERY PLAN
-----------------------------------------------------------------------------------------------------------------Bitmap Heap Scan on public.class  (cost=4.29..8.30 rows=1 width=35) (actual time=0.025..0.025 rows=1 loops=1)Output: st_no, nameRecheck Cond: (class.st_no = 2)Heap Blocks: exact=1Buffers: shared hit=3->  Bitmap Index Scan on no_index  (cost=0.00..4.29 rows=1 width=0) (actual time=0.019..0.019 rows=1 loops=1)Index Cond: (class.st_no = 2)Buffers: shared hit=2Planning time: 0.088 msExecution time: 0.063 ms
(10 rows)

这是一个针对名为"class"的表执行的查询计划解释,查询目标是选择"st_no"等于2的行。下面是对每个步骤的详细解释:

  • Bitmap Heap Scan on public.class:

这是一个使用位图堆扫描的操作,意味着数据库系统将使用位图索引来找到符合条件的行。它会扫描名为"class"的表。 预计执行成本(cost)在4.29到8.30之间,这是一个估计值。 预计返回1行,宽度为35个单位。 实际执行时间为0.025毫秒,只有1行符合条件。 执行次数为1。

  • Recheck Cond: (class.st_no = 2):

在这个步骤中,系统会重新检查前一个条件,确保返回的行确实满足查询条件。 检查的条件是"class.st_no = 2",即"st_no"等于2。 堆块(Heap Blocks):这里使用了一个堆块,这是一个精确的值,表示内存中的块数。 缓冲区(Buffer):在这个步骤中,共使用了3个共享缓冲区,其中1个被精确地命中。

  • Bitmap Index Scan on no_index:

这是一个使用位图索引扫描的操作,系统会使用名为"no_index"的索引。 预计执行成本为0.00到4.29之间。 预计返回1行,宽度为0,因为这是一个索引扫描,不返回实际的列数据。 实际执行时间为0.019毫秒,只有1行符合条件。 执行次数为1。 索引条件是"(class.st_no = 2)",表示"st_no"等于2。

  • Planning time:

优化器花费的规划时间,为0.088毫秒。

  • Execution time

:整个查询的执行时间,为0.063毫秒。 总结:该查询使用了位图索引扫描和位图堆扫描,通过索引快速定位到符合条件的行,然后进一步确认行是否真正符合条件。整个查询的执行时间非常短,性能较高。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/2414.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

4月23日,每日信息差

第一、目前全国共确定工伤保险异地就医直接结算试点城市131个,开通上线工伤医疗、工伤康复、辅助器具配置协议机构共398家。工伤职工按规定完成备案,持社保卡或电子社保卡可以到试点城市的协议机构直接结算相关费用 第二、极兔快递仅用 4 年成为中国国内…

算法和数据结构4.23:

1.测试工程师算法总结: L1排序和查找算法: 复杂度分析 查找算法:顺序查找、二分查找、其他查找算法 排序算法:冒泡排序、快速排序、其他排序算法 L2数据结构-线性表:链表、栈、队列、堆 L3数据结构-非线性表&…

信创传输软件,如何进行国产化替代?

信创产业,即信息技术应用创新产业,它与“863 计划”“973 计划”“核高基” 一脉相承,是我国 IT 产业发展升级采取的长期计划。网络安全事件频发后,中国要确保 IT 相关设施的全部环节国产化,任何不能保证自主可控的环节…

服务器(AIX、Linux、UNIX)性能监视器工具【nmon】使用介绍

目录 ■nmon简介 1.安装 2.使用简介 3.使用(具体使用的例子【CPU】【内存】) 4.采集数据 5.查看log(根据结果,生成报表) 6.分析结果 ■nmon简介 nmon("Nigels performance Monitor"&…

终于有人说明白了session、cookie和token的区别

一、首先介绍一下名词:Session、cookie、token,如下: 1.Session会话:客户端A访问服务器,服务器存储A的数据value,把key返回给客户端A,客户端A下次带着key(session ID)来…

(一)输入验证(语法和语义)

你无法控制进入应用程序的内容,甚至无法控制从数据库进入的内容,因为这些数据之前可能已经注入了。日期,如1900年 不是一个有效的日期,应确保在预期的范围内。因此,任何来自你控制的领域之外的东西,比如来自…

一文浅谈FRTC8563时钟芯片

FRTC8563是NYFEA徕飞公司推出的一款实时时钟芯片,采用SOP-8封装形式。这种封装形式具有体积小、引脚间距小、便于集成等特点,使得FRTC8563能够方便地应用于各种电子设备中。 FRTC8563芯片基于32.768kHz的晶体振荡器工作,这种频率的晶体振荡器…

2024年特种作业操作证(登高架设作业)考试题库及答案

一、选择题 1.带电跨越架宜采用干燥的竹竿、杉杆搭设,严禁使用(  )等。 A.钢管 B.松木 C.柳木 答案:A 2.跨越架立杆间距为(  )m。 A.1.2 B.1.5 C.1.8 答案:B 3.跨越架杆件相交时,不得一扣…

生活无趣感的成因与破解之道

在日常生活中,我们不时会听到身边人感慨:“生活真是无趣。”这种感受仿佛超越了年龄、性别、职业界限,成为现代社会的一种普遍情绪。然而,生活本身蕴含着无数色彩与可能,为何在许多人眼中却显得如此平淡乏味&#xff1…

JavaSE——程序逻辑控制

1. 顺序结构 顺序结构 比较简单,按照代码书写的顺序一行一行执行。 例如: public static void main(String[] args) {System.out.println(111);System.out.println(222);System.out.println(333);} 运行结果如下: 如果调整代码的书写顺序 , …

(ICML-2021)从自然语言监督中学习可迁移的视觉模型

从自然语言监督中学习可迁移的视觉模型 Title:Learning Transferable Visual Models From Natural Language Supervision paper是OpenAI发表在ICML 21的工作 paper链接 Abstract SOTA计算机视觉系统经过训练可以预测一组固定的预定目标类别。这种受限的监督形式限制…

在 Kubernetes 1.24 中使用 Docker:配置与应用指南

在 Kubernetes 1.24 中使用 Docker:配置与应用指南 引言 随着 Kubernetes 社区对容器运行时接口(CRI)的标准化推进,Docker 原生支持在 Kubernetes 1.24 版本中被弃用。然而,许多开发者和组织仍希望继续使用 Docker。…

服务器基本故障和排查方法

前言 服务器运维工作中遇到的问题形形色色,无论何种故障,都需要结合具体情况,预防为主的思想,熟悉各种工具和技术手段,养成良好的日志分析习惯,同时建立完善的应急预案和备份恢复策略,才能有效…

工业设备管理平台

在这个数字化、智能化的新时代,工业设备管理平台正成为推动工业转型升级的重要力量。在众多平台中,HiWoo Cloud以其卓越的性能、稳定的服务和创新的理念,赢得了广大用户的青睐。今天,就让我们一起走进HiWoo Cloud的世界&#xff0…

WebSocket的原理、作用、常见注解和生命周期的简单介绍,附带SpringBoot示例

文章目录 WebSocket是什么WebSocket的原理WebSocket的作用全双工和半双工客户端【浏览器】API服务端 【Java】APIWebSocket的生命周期WebSocket的常见注解SpringBoot简单代码示例 WebSocket是什么 WebSocket是一种 通信协议 ,它在 客户端和服务器之间建立了一个双向…

123.Mit6.S081-实验1-Xv6 and Unix utilities

今天我们来进行Mit6.S081实验一的内容。 实验任务 一、启动xv6(难度:Easy) 获取实验室的xv6源代码并切换到util分支。 $ git clone git://g.csail.mit.edu/xv6-labs-2020 Cloning into xv6-labs-2020... ... $ cd xv6-labs-2020 $ git checkout util Branch util …

QML语法计基础二

1.Item 所有可视化类型的基类 可以作为容器,里面包含各种可视化类 1.1 opacity不透明度 取值范围:0.0-1.0 父容器的不透明度会影响到子容器,如果要设置不透明度,只需要更改子容器的不透明度即可 1.2 visible可见与enable启用 visible 可视化控件的可见…

Go 堆内存分配源码解读

简要介绍 在Go的内存分配中存在几个关键结构,分别是page、mspan、mcache、mcentral、mheap,其中mheap中又包括heapArena,具体这些结构在内存分配中担任什么角色呢? 如下图,可以先看一下整体的结构: mcach…

LeetCode刷题合集

203.移除链表元素 定位到需要删除节点的上一个节点 cur,将其指向下下个节点。 class Solution:def removeElements(self, head: Optional[ListNode], val: int) -> Optional[ListNode]:dummy_head ListNode(val 0, next head)cur dummy_headwhile cur and cu…

Linux进程详解二:创建、状态、进程排队

文章目录 进程创建进程状态进程排队 进程创建 pid_t fork(void) 创建一个子进程成功将子进程的pid返回给父进程,0返回给新创建的子进程 fork之后有两个执行分支(父和子),fork之后代码共享 bash -> 父 -> 子 创建一个进…