Hologres的EXPLAIN和EXPLAIN ANALYZE简介

文章目录

  • 一、执行计划
    • 1、概念简介
    • 2、使用方式
      • ①、EXPLAIN
      • ②、EXPLAIN ANALYZE
  • 二、算子解读
    • 1、SCAN
    • 2、Index Scan和 Index Seek
    • 3、Filter
    • 4、Decode
    • 5、Redistribution
    • 6、Join
    • 7、Broadcast
    • 8、Shard prune和Shards selected
    • 9、ExecuteExternalSQL
    • 10、Aggregate
    • 11、Sort
    • 12、Limit
    • 13、Append
    • 14、Exchange
    • 15、Forward
    • 16、Project

一、执行计划

1、概念简介

EXPLAIN:代表优化器QO根据SQL特征预估的SQL执行计划,并非实际的执行计划,对SQL的运行有一定参考意义。

EXPLAIN ANALYZE:代表SQL真实的运行计划,相比EXPLAIN会包含更多的实际运行信息,能准确的反映出SQL的执行算子和算子耗时,可以根据算子耗时去做针对性的SQL优化。

2、使用方式

①、EXPLAIN

EXPLAIN <sql>;示例: 
EXPLAIN SELECTl_returnflag,l_linestatus,sum(l_quantity) AS sum_qty,sum(l_extendedprice) AS sum_base_price,sum(l_extendedprice * (1 - l_discount)) AS sum_disc_price,sum(l_extendedprice * (1 - l_discount) * (1 + l_tax)) AS sum_charge,avg(l_quantity) AS avg_qty,avg(l_extendedprice) AS avg_price,avg(l_discount) AS avg_disc,count(*) AS count_order
FROMlineitem
WHEREl_shipdate <= date '1998-12-01' - interval '120' day
GROUP BYl_returnflag,l_linestatus
ORDER BYl_returnflag,l_linestatus;

在这里插入图片描述

解释说明: 执行计划需要从下往上看,每个箭头(->)代表一个节点,每个子节点会返回使用的算子,以及预估的行数等。

在这里插入图片描述

②、EXPLAIN ANALYZE

EXPLAIN ANALYZE <sql>;示例:
EXPLAIN ANALYZE SELECTl_returnflag,l_linestatus,sum(l_quantity) AS sum_qty,sum(l_extendedprice) AS sum_base_price,sum(l_extendedprice * (1 - l_discount)) AS sum_disc_price,sum(l_extendedprice * (1 - l_discount) * (1 + l_tax)) AS sum_charge,avg(l_quantity) AS avg_qty,avg(l_extendedprice) AS avg_price,avg(l_discount) AS avg_disc,count(*) AS count_order
FROMlineitem
WHEREl_shipdate <= date '1998-12-01' - interval '120' day
GROUP BYl_returnflag,l_linestatus
ORDER BYl_returnflag,l_linestatus;

在这里插入图片描述

解释说明: EXPLAIN ANALYZE的执行结果反映的是真实执行路径,其结果是一个由多个算子组成的树状结构,会反映出每个阶段每个算子的详细执行信息。EXPLAIN ANALYZE的结果主要包括Query Plan、Advice、Cost耗时、Resource资源消耗情况。

二、算子解读

详情点击参考

1、SCAN

Seq Scan表示顺序地从表中读取数据,会进行全表扫描。

2、Index Scan和 Index Seek

如果扫描表有命中索引,根据表的存储格式(行存或列存) Hologres在底层使用的索引也不同。

1、Clustering_index:表示使用了列存表的索引(例如segment 、clustering等),只要查询命中索引就会使用Clustering_index。
2、Index Seek(又名pk_index):表示使用了行存表的索引,主要是主键索引。

3、Filter

Filter代表将数据根据SQL条件进行过滤,一般会跟随seq scan on table一起,是seq scan的子节点,表示扫描表时是否有过滤,以及过滤条件是否命中索引。

主要包括: Filter、Segment Filter、Cluster Filter、Bitmap Filter、Join Filter

4、Decode

Decode表示对数据进行解码或者编码,以加速text等文本类数据的计算。

5、Redistribution

Redistribution表示数据通过哈希分布或者随机分布,查询时shuffle到一个或者多个shard。

如果出现redistribution,则说明没有利用local join的能力,导致查询性能不佳。没有利用有两种情况
1.distribution key设置不合理
2.对应的key(如join key、group by key)涉及到表达式时

6、Join

多表关联(Join)根据SQL的书写方式又分为hash join、nested loop和merge join。
Hash Join:  hash join是指两个表或者多表join时,基于其中一个表(一般为小表)在内存中构建一个hash表,并把join的列值进行hash计算后放进hash表中,之后逐行的读取另外的表,计算出其hash值并在hash表中查找,最终返回匹配的数据。当出现hash join时,我们需要额外关注join表中的小表(数据量较小的表)是否是做了hash表,可以通过如下几种方式查看:
1、执行计划中,有hash字样的表是hash表。
2、执行计划中,从下往上看,最下面的表则是hash表。
Nested Loop Join和Materialize:  
Nested Loop代表嵌套循环连接,多表关联时,先从一张表中读取数据,成为外层表,再将外层驱动表的每条数据遍历另外的表(即内层表),然后内外层表嵌套循环进行Join,相当于计算笛卡尔积。在执行计划中第一内层表通常有Materialize算子。

7、Broadcast

Broadcast指通过广播的方式将数据分发到各个shard,通常用在Broadcast Join的场景中,一般是小表join大表。

8、Shard prune和Shards selected

Shard prune: 表示获取Shard的方式,包括:

lazaily:根据节点中的Shard ID先标记对应的Shard,在后续计算时选择对应的Shard。
eagerly:根据命中的Shard选择对应的Shard,不需要的Shard则不需要选择。

优化器会根据执行计划来自动匹配Shard prume的方式,无需手动调节。

Shards selected: Shards selected表示选中了多少个Shard,例如1 out of 20表示在20个Shard中选中了一个Shard。

9、ExecuteExternalSQL

Hologres的计算引擎会分为HQE、PQE、SQE等,其中PQE是原生Postgres引擎,部分Hologres自研引擎HQE还没有支持的算子和函数,会通过PQE执行,相比于HQE,PQE的执行效率会更低。当我们在执行计划中看到有ExecuteExternalSQL算子,说明有函数或者算子走了PQE。

10、Aggregate

Aggregate代表将数据聚合,可以是一个聚合函数或者多个聚合函数的组合。

  1. GroupAggregate:表示数据已经按照group by进行了预排序。
  2. HashAggregate(最常见):表示数据先进行hash计算,然后通过hash值分发至不同的shard进行聚合,最终通过Gather算子聚合。
  3. 多阶段HashAggregate:数据是在shard中按照文件存储的,文件有不同的层级,当数据量多时,聚合的阶段也会分为多个阶段。主要的子算子包括:
    Partial HashAggregate:文件和shard内的聚合。
    Final HashAggregate:多个shard上的数据聚合在一起。

11、Sort

sort表示将数据按顺序排序(升序ASC或者降序DESC),通常是order by子句的结果。

调优建议:如果order by的数据量较大,将会消耗较多的资源,需要尽量避免大数据量的排序查询。

12、Limit

limit表示SQL最终允许返回的数据行数。并不代表实际计算中扫描的行数

13、Append

子查询的结果合并,通常为Union All操作。

14、Exchange

Shard内的数据交换。无需过多关注。

15、Forward

Forward代表将算子的数据在HQE与PQE或者SQE之间传输,一般是HQE+PQE或者HQE+SQE的组合会出现。

16、Project

Project一般表示子查询与外层查询的映射关系,无需过多关注。

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

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

相关文章

49-Oracle init.ora-PFILE-SPFILE-启动参数转换实操

一早出现EMCC挂了&#xff0c;之后发现EMCC依赖的instance 挂了&#xff0c;重启startup后发现spfile无法启动。还是和小伙伴把基础问题搞清。spfile是动态文件、动态文件、动态文件&#xff0c;linux下vi看起来部分乱码部分是可编辑的&#xff0c;vi即使可以编辑也需要转换成p…

spring碎片

包的扫描过程 判断当前是否是文件夹获取文件夹里面的所有内容判断文件夹是否为空,为空的话直接返回如果文件夹不为空,则遍历文件夹里面的所有内容 遍历得到每个file对象,继续进行判断,如果还是文件,则进一步进行递归遍历得到的file对象不是文件夹,是文件得到包路径类名称-字符…

如何形成项目经验在多个项目间的高效复用?

要实现项目经验的跨项目高效复用&#xff0c;核心在于建立系统化总结机制、标准化知识表达、平台化共享工具。其中&#xff0c;标准化知识表达尤为关键&#xff0c;它通过统一模板和分类体系&#xff0c;确保不同项目的经验可以被快速理解、轻松匹配到新场景&#xff0c;从而提…

目标检测之YOLOV11谈谈OBB

引言&#xff1a;从轴对齐到定向边界框的范式转变 在计算机视觉领域&#xff0c;目标检测算法长期受限于轴对齐边界框&#xff08;AABB&#xff09;的固有缺陷——当面对航拍图像中的舰船、遥感影像中的建筑物或工业质检中的倾斜零件时&#xff0c;传统边界框会包含大量背景噪…

Vue2之生命周期

文章目录 Vue生命周期Vue生命周期钩子生命周期钩子小案例在created中获取数据在mounted中获取焦点 Vue生命周期 思考&#xff1a;什么时候可以发送初始化渲染请求&#xff1f;&#xff08;越早越好&#xff09;什么时候可以开始操作dom&#xff1f;&#xff08;至少dom得渲染出…

Web 架构之多租户(SaaS)系统设计要点

文章目录 一、多租户系统概述定义应用场景 二、设计要点1. 数据隔离独立数据库共享数据库&#xff0c;独立 Schema共享数据库&#xff0c;共享 Schema数据访问控制 2. 资源分配计算资源存储资源 3. 租户管理租户注册与注销租户信息管理 4. 安全与合规身份验证与授权数据加密 三…

【Clickhouse系列】索引

目录 1. 主键索引 (Primary Key Index) - 核心是稀疏索引 2. 跳数索引 (Data Skipping Indexes) - 二级索引 3. 关键总结与最佳实践&#xff1a; ClickHouse的索引设计哲学与其他传统OLTP数据库&#xff08;如MySQL&#xff09;有显著不同&#xff0c;它更侧重于高效扫描大数…

445场周赛

第一题&#xff1a;检查元素频次是否为质数 给你一个整数数组 nums。 如果数组中任一元素的 频次 是 质数&#xff0c;返回 true&#xff1b;否则&#xff0c;返回 false。 元素 x 的 频次 是它在数组中出现的次数。 质数是一个大于 1 的自然数&#xff0c;并且只有两个因数…

【SQL语法汇总】

读音:MySQL —— 卖舌口 MySQL 实际上是DBMS软件系统, 并非数据库。通过系统管理维护数据库,DBMS相当于用户和数据库之间的桥梁。 MySQL是一种关系型数据库, 类似excel,用行和列的关系组织数据数据。 操作关系型数据库的DBMS系统大多数用SQL来管理数据。 SQL是编程语言…

C++法则10:引用本身是一个“别名”(alias),一旦绑定到一个对象后,就不能再重新绑定到其他对象。

C法则10&#xff1a;引用本身是一个“别名”&#xff08;alias&#xff09;&#xff0c;一旦绑定到一个对象后&#xff0c;就不能再重新绑定到其他对象。 在C中&#xff0c;引用&#xff08;reference&#xff09;是一个已存在对象的别名。一旦引用被初始化绑定到一个对象&…

PHP 生成当月日期

一&#xff1a;按日期顺序排列的数组&#xff0c;而不是按周分组的二维数组 /*日期生成 *day: 日期数字 *date: 完整的日期字符串 (YYYY-MM-DD) *is_current_month: 是否属于当前月份 *is_prev_month: 是否是上个月的日期 *is_next_month: 是否是下个月的日期 *is_today: 是否是…

vue3+elementPlus实现无缝滚动表格封装

vue3+elementPlus+css+js 模拟liMarquee插件,实现无限滚动效果 功能:1、表格数据大于一定数量之后,开始向上滚动 2、当鼠标移入的时候,动画停止,鼠标移出,继续动画 3、滚动动画的速度可以自定义 4、表格的高度固定 5、向上滚动时,无限滚动,不存在卡顿 <template>…

AI赋能企业内训:2025智能化教育培训系统源码开发全解析

从线下集中授课到线上碎片化学习&#xff0c;从被动灌输到主动交互&#xff0c;越来越多企业开始关注“企业内训系统”的智能化升级。而这一切的背后&#xff0c;离不开AI技术的深度赋能。 笔者认为&#xff0c;2025年将是企业内训系统“从信息化走向智能化”的关键拐点。本篇…

旅游安全急救实训室:构建旅游行业安全人才培养新范式

在文旅产业蓬勃发展与安全应急需求日益凸显的背景下&#xff0c;旅游安全急救能力已成为从业者的核心素养之一。当前&#xff0c;旅游市场突发状况频发&#xff0c;如景区意外事故、游客突发疾病等&#xff0c;对从业人员的急救技能提出了更高要求——既要掌握基础急救操作&…

网络编程及原理(六):三次握手、四次挥手

目录 一 . TCP 的核心机制&#xff1a;连接管理 二 . 三次握手&#xff1a;建立连接 &#xff08;1&#xff09; 三次握手的意义 &#xff08;1.1&#xff09;初步验证通信链路是否流畅 &#xff08;1.2&#xff09;确认通信双方各自的发送、接受能力是否正常 &…

【LLaMA 3实战】2、LLaMA 3对话能力全解析:从架构革新到多智能体实战指南

引言:LLaMA 3对话能力的革命性突破 当Meta发布LLaMA 3时,其对话能力的跃升重新定义了开源大模型的边界。这款拥有128K上下文窗口的开源模型,不仅在MT-Bench评测中超越GPT-3.5,更通过分组查询注意力(GQA)等架构创新,实现了推理速度30%的提升。 本文将从底层架构到应用实战…

面试题-在ts中类型转换的方法

在 TypeScript 中&#xff0c;类型转换主要分为 类型断言&#xff08;Type Assertion&#xff09;、类型守卫&#xff08;Type Guard&#xff09; 和 类型兼容转换 三种方式。以下是详细分类和示例&#xff1a; 一、类型断言&#xff08;Type Assertion&#xff09; 强制编译…

IIS配置SSL证书

公司的一个项目使用IIS部署的网站&#xff0c;现在需要更新SSL证书。为了下次方便&#xff0c;在此做记录整理。 以下第一部分是查网络AI查询到的资料&#xff0c;解决了我心中对双击和从IIS导入有什么不同的疑惑。第二部分是我在这次实际操作过程中的截图。 一.证书安装方式 …

K8s初始化容器与边车容器比对

Kubernetes 中的初始化容器和边车容器 Kubernetes 作为一个开源容器编排平台&#xff0c;引入了强大的概念来管理和增强 Pod 内容器的功能。其中两个概念是初始化容器&#xff08;Init Containers&#xff09;和边车容器&#xff08;Sidecar Containers&#xff09;。尽管这两…

无线Debugger攻防全解:原理剖析与突破之道

引言​​ 在Web安全防护体系中&#xff0c;反调试技术已成为对抗爬虫和分析的关键武器。2023年OWASP报告显示&#xff0c;Top 1000网站中92%部署了反调试机制&#xff0c;其中​​无线Debugger技术​​&#xff08;也称为无限Debug&#xff09;因其难以破解的特性&#xff0c;…