HGDB中的扫描类型

文章目录

  • 文档用途
  • 详细信息

文档用途

介绍HGDB中的扫描类型

详细信息

1、全表扫描
全表扫描在HGDB中也称为顺序扫描(seq scan),全表扫描就是把表的所有数据块从头到尾读一遍,然后筛选出符合条件的数据块。

全表扫描在explain命令输出结果中用“Seq Scan”表示,如下所示:

highgo=# explain select * from emp;QUERYPLAN------------------------------------------------------Seq Scanonemp(cost=0.00..1.14rows=14width=116)(1行记录)

2、索引扫描

索引通常是为了加快查询数据的速度而增加的。索引扫描,就是在索引中找出需要的数据行的物理位置,然后再到表的数据块中把相应的数据读出来。

索引扫描在explain命令输出结果中用"Index Scan"表示,如下:

highgo=# explain select * from people where id=14;QUERYPLAN---------------------------------------------------------------------IndexScanusinginx_idonpeople(cost=0.44..8.45rows=1width=8)IndexCond:(id=14)(2行记录)

3、位图扫描

位图扫描也是走索引的一种方式。方式是扫描索引,把满足条件的行或块在内存中建一个位图,扫描完索引后,再根据位图列表的数据文件把相应的数据读出来。如果走了两个索引,可以把两个索引形成的位图进行"and"或"or"计算,合并成一个位图,再到表的数据文件中把数据读出来。

当执行计划的结果中行数很多时会进行位图扫描,如非等值查询、IN子句或有多个条件都可以走不通的索引时。

以下示例是返回值较多:

highgo=# explain select ename from test where empno=7499;QUERYPLAN----------------------------------------------------------------------------Bitmap Heap Scanontest(cost=79.79..613.59rows=4064width=5)Recheck Cond:(empno=7499)->BitmapIndexScanoninx_empno(cost=0.00..78.77rows=4064width=0)IndexCond:(empno=7499)(4行记录)`

在位图扫描中,可以看到"Bitmap Index Scan"先在索引中找到符合条件的行,然后在内存中建立位图,之后再到表中扫描,也就是看到" Bitmap Heap Scan"。

4、条件过滤

条件过滤,一般就是在where条件上加的过滤条件,当扫描数据行时,会找出满足过滤条件的行。条件过滤在执行计划中显示为"Filter",示例如下:

highgo=# explain select ename from emp where empno=7499;QUERYPLAN----------------------------------------------------Seq Scanonemp(cost=0.00..1.18rows=1width=38)Filter:(empno=7499)(2行记录)

5、Nestloop Join

嵌套循环(Nestloop Join)是在两个表连接时一种连接方式。在嵌套循环中,内表被外表驱动,外表返回的每一行都要在内表中检索找到与它匹配的行,因此整个查询返回的结果集不能太大,要把返回子集较小的表作为外表,且内表的连接字段上要有索引。

执行过程:确定一个驱动表(outer table),另一个表为inner table,驱动表中每一行与inner table中的相应记录关联。

示例如下:

highgo=# explain select * from people,dept where dept.deptno=people.id;QUERYPLAN---------------------------------------------------------------------------NestedLoop(cost=0.44..5719.30rows=680width=100)->Seq Scanondept(cost=0.00..16.80rows=680width=92)->IndexScanusinginx_idonpeople(cost=0.44..8.38rows=1width=8)IndexCond:(id=dept.deptno)(4行记录)

6、Hash Join

优化器使用两个比较的表,并利用连接键在内存中建立散列表,然后扫描较大的表并探测散列表,找出与散列表匹配的行。

这种方式适用于较小的表可以完全放于内存中的情况,这样总成本就是访问两个表的成本之和。但如果表很大,不能完全放入内存,优化器会将它分割成若干不听的分区,把不能放入内存的部分写入磁盘的临时段,此时要有较大的临时段以便提高I/O的性能。

示例如下:

highgo=# explain select * from test,dept where dept.deptno=test.deptno;QUERYPLAN--------------------------------------------------------------------HashJoin(cost=25.30..1870.22rows=57344width=127)HashCond:(test.deptno=dept.deptno)->Seq Scanontest(cost=0.00..1056.44rows=57344width=35)->Hash(cost=16.80..16.80rows=680width=92)->Seq Scanondept(cost=0.00..16.80rows=680width=92)(5行记录)

因为dept表小于test表,所以Hash Join先在较小的表dept上建立散列表,然后扫描较大的表test,并探测散列表,找出与之相匹配的行。

7、Merge Join

通常情况下,散列连接的效果比合并连接好,但如果源数据上有索引,或者结果已经被排过序,在执行排序合并连接时,就不需要排序了,这时合并连接的性能会优于散列连接。

下面示例中,people的id字段和dept01的depto字段都有索引,且从索引扫描的数据已经排好序,可以直接走Merge Join:

highgo=# explain select people.id from people,dept01 where people.id=dept01.deptno;QUERYPLAN-------------------------------------------------------------------------------------------------MergeJoin(cost=0.86..64873.59rows=1048576width=4)MergeCond:(people.id=dept01.deptno)->IndexOnly Scanusingpeople_pkeyonpeople(cost=0.44..303935.44rows=10000000width=4)->IndexOnly Scanusingidx_deptnoondept01(cost=0.42..51764.54rows=1048576width=2)(4行记录)

删除dept01上的索引,会发现执行计划中先对dept01排序后在走Merge Join,示例如下:

highgo=# explain select people.id from people,dept01 where people.id=dept01.deptno;QUERYPLAN-------------------------------------------------------------------------------------------------MergeJoin(cost=136112.80..154464.29rows=1048576width=4)MergeCond:(people.id=dept01.deptno)->IndexOnly Scanusingpeople_pkeyonpeople(cost=0.44..303935.44rows=10000000width=4)->Materialize(cost=136112.36..141355.24rows=1048576width=2)->Sort(cost=136112.36..138733.80rows=1048576width=2)SortKey: dept01.deptno->Seq Scanondept01(cost=0.00..16918.76rows=1048576width=2)(7行记录)

上面执行计划中,可看到“Sort Key: dept01.deptno”,这就是对表dept01的id字段进行排序。

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

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

相关文章

又到一年年终啦,我也浅浅总结下项目经常用到的ES7及以后版本的核心新特性,码友友们,这些你都知道吗

自ES6(ECMAScript 2015)带来大规模语法革新后,ECMAScript标准开启了每年迭代的节奏,从ES7(2016)开始,每个版本都聚焦于实用小特性的补充与优化,逐步解决开发者在日常编码中的痛点。本…

【Java开发】gRPC协议原理剖析及其在微服务架构中的应用

【精选优质专栏推荐】 《AI 技术前沿》 —— 紧跟 AI 最新趋势与应用《网络安全新手快速入门(附漏洞挖掘案例)》 —— 零基础安全入门必看《BurpSuite 入门教程(附实战图文)》 —— 渗透测试必备工具详解《网安渗透工具使用教程(全)》 —— 一站式工具手册《CTF 新手入门实战教…

深度剖析eBPF技术原理及其在微服务网关性能优化中的实践应用

【精选优质专栏推荐】 《AI 技术前沿》 —— 紧跟 AI 最新趋势与应用《网络安全新手快速入门(附漏洞挖掘案例)》 —— 零基础安全入门必看《BurpSuite 入门教程(附实战图文)》 —— 渗透测试必备工具详解《网安渗透工具使用教程(全)》 —— 一站式工具手册《CTF 新手入门实战教…

React Vue 如何让 Cookie 逻辑“秒变优雅”?

你是否还在为 document.cookie 的手动操作头疼?设置一个登录 token,还得手动处理编码、路径、过期时间,一不小心就触发跨域错误或 XSS 风险?更糟的是,每次写代码都像在玩“cookie 拼图”——要么漏了 HttpOnly&#xf…

GBase8s集合类型之关联数组简介

GBase 8s兼容oracle的PL/SQL编程语言,PL/SQL 语法需要显式设置环境变量SQLMODE为’ORACLE’后才能生效,默认情况下8s的SQLMODE为’GBASE’,此时不支持 PL/SQL 语法。本文将介绍GBase 8s兼容oracle模式中的关联数组类型,包括它们的…

GBase 8a 参数gcluster_shrink_to_rebalance使用介绍

参数功能控制shrink操作使用rebalance方式的开关。 取值 0:关闭 shrink to rebalance 功能; 取值 1: 打开 shrink to rebalance 功能; 默认取值:1。原理特性该参数为862-Build43后的新功能。打开该参数,执行…

打工人救星!用doocs md写公众号必搭cpolar,再也不用卡局域网里改稿了

文章目录1 项目 doocs/md 介绍2 安装Nodejs环境2.1 下载Nodejs安装程序2.2 安装Nodejs程序2.3 验证Nodejs是否安装2.4 设置国内淘宝镜像源3 下载本地部署doocs/md项目3.1 将项目下载至本地3.2 解压doocs/md项目3.3 安装依赖和启动doocs/md项目4 将网站穿透至公网(cp…

帝国CMS搭建全攻略:从安装到优化

帝国CMS搭建指南系统环境准备确保服务器环境满足以下要求:PHP版本5.6及以上,MySQL数据库5.0及以上,推荐使用Apache或Nginx作为Web服务器。Windows系统建议使用WAMP/LAMP集成环境,Linux系统需提前安装PHPMySQL环境组件。下载与安装…

GBase 8c数据库磁盘故障定位技术分享

南大通用GBase 8c数据库常见的磁盘故障是磁盘空间不足、磁盘出现坏块、磁盘未挂载等。部分磁盘故障会导致文件系统损坏,例如磁盘未挂载,数据库管理自动定期执行磁盘检测时会识别故障并将实例停止,查看数据库状态时对应实例状态异常&#xff1…

852-017500-003-6-C220ASSEMBLY CHASSIS 14 英寸屏幕LAM

产品概述该部件为LAM Research(泛林半导体)生产的设备组件,型号为852-017500-003-6-C220,属于14英寸屏幕的底盘组装件(Chassis Assembly)。LAM Research是全球领先的半导体制造设备供应商,此类组…

Windows版本的Dify平台搭建

Windows版本基于Docker的Dify平台搭建 1:名词解释 1.1:Hyper-V Hyper-V 是微软提供的 **Type-1(裸机型)虚拟化技术**,可在一台物理计算机上同时运行多个相互隔离的虚拟机。每个虚拟机拥有独立的操作系统和虚拟硬件资源,通过虚拟…

Sanyo Denki PU0A030EMA1S00 伺服放大器

Sanyo Denki PU0A030EMA1S00 伺服放大器概述Sanyo Denki(山洋电气)PU0A030EMA1S00 是一款高性能伺服放大器,专为精密运动控制应用设计。该型号通常用于工业自动化、机器人、CNC机床等场景,支持与配套的伺服电机协同工作&#xff0…

便携式半实物测试平台 ETest_PT

1)产品简介 ETest_PT是一款便携嵌入式系统测试平台,由软件和硬件两部分组成,软件采用ETest,硬件包括测试主机、USB接口设备(CAN、TCP/UDP、RS232/422/485、AD/DA/DI/DO、ARINC429、1553B、1394B、FC等)。 …

2026年Highcharts迎来系列更新| V12.5 正式发布

更新日志见官网:https://www.highcharts.com/changelog/ 2026年1月12日 — Highcharts团队正式发布v12.5.0版本,为核心产品线带来多项重要更新。 本次发布最值得关注的亮点包括树状图(Dendrogram)的正式支持、Highcharts Grid 2…

GBase 8c数据库运维——常见故障定位手段 分享

1.操作系统故障定位手段查询状态时,显示一个节点上所有实例都不正常时,可能是操作系统发生了故障。 可以通过如下方法确定操作系统是否存在问题:通过 SSH 或者其它远程登录工具登录该节点。如果连接失败,请尝试通过 ping 发包检查…

Flutter 又迎大坑修改?iOS 26 键盘变化可能带来大量底层改动

又是一个小问题可能带来的大改动,感觉官方在评估的时候,有点过分细节了。 这个问题来自去年底的 #179482 issue ,Flutter 在 iOS 26 上,某些场景会因为出现半透明键盘,而页面底下本来应该被键盘遮挡的 Widget&#xf…

3C电子电爪的“心脏”:满足各行各业高精度需求的电爪厂家推荐 - 品牌2025

在高端制造迈向智能化、柔性化的新阶段,电动夹爪作为机器人末端执行器的核心组件,正成为决定产线效率与良率的关键。尤其在3C电子、半导体、新能源等对微米级操作精度要求严苛的行业,传统气动方案已难以满足柔性抓取…

易语言开发从入门到精通:26+27章实战复盘·全栈知识体系地图·终身学习资源库·个人成长与中文编程传承指南

易语言开发从入门到精通:2627章实战复盘全栈知识体系地图终身学习资源库个人成长与中文编程传承指南 🔄🗺️📚 1.28.1 学习目标 🎯 作为《易语言开发从入门到精通》的全书系统性收尾总结升华终身学习开篇,本…

文献阅读6

文献阅读66. Disscusion 6.1. Ablation study消融实验从两部分展开:1)关于 DBPM 组件的消融(Ablation Study about DBPM)2)关于训练策略的消融(Ablation Study about Training Strategy)1)关于 DBPM 组件的消融…

企业微信API开发:外部群主动推送场景

​ QiWe开放平台 开发者名片 API驱动企微自动化,让开发更高效 核心能力:为开发者提供标准化接口、快速集成工具,助力产品高效拓展功能场景 官方站点:https://www.qiweapi.com 团队定位:专注企微API生…