南大通用GBase 8c 执行计划功能说明

原文链接:www.gbase.cn/community/p...

更多精彩内容尽在南大通用GBase技术社区,南大通用致力于成为用户最信赖的数据库产品供应商。

在数据库性能优化中,执行计划(Execution Plan) 是理解 SQL 查询行为的核心工具。它揭示了数据库优化器如何将 SQL 语句转化为具体的物理操作步骤。执行计划是数据库优化器根据 SQL 语句、表结构、统计信息等生成的执行路径方案。它描述了 SQL 查询的详细操作流程,包括:

  • 操作类型:如全表扫描、索引扫描、哈希连接等。
  • 操作顺序:各步骤的执行顺序和依赖关系。
  • 资源消耗:预估的行数(rows)、时间成本(cost)等。

在南大通用GBase 8c分布式场景下,执行计划可以帮助运维人员快速定位性能瓶颈,或者实现验证索引使用、优化器决策验证等效果。这篇文章将简述在GBase 8c数据库中的查询全周期,以及执行计划在其中的重要性。

1. 数据库查询周期

全周期应为:客户端→数据库连接→解析树→重写系统→规划器→执行器。过程中分为五个阶段:

第一阶段:通过客户端连接到GBase 8c 数据库。

第二阶段:将查询转换为称为解析树的中间格式。

第三阶段:重写系统/规则系统。它采用从第二阶段生成的解析树,并以规划器/优化器可以开始在其中工作的方式重新编写它。

第四阶段:规划阶段是最重要的阶段。在如何执行查询、使用什么索引、是否扫描较小的表以消除更多不必要的行等事项上做出规划。

第五阶段:执行器,也是最后一个阶段,将进行实际执行并返回结果。

对于每个收到的查询,GBase 8c都快速生成查询计划,并选择最合适的计划来匹配查询结构和数据的属性,提升查询性能。

2. 执行计划的获取

在GBase 8c中,主要通过EXPLAIN 命令获取执行计划。

2.1 基础语法

以下是几种常见的方式:

  • 显示SQL语句的执行计划,支持多种选项,对选项顺序无要求。
ini 复制代码
EXPLAIN [ ( option [, ...] ) ] statement;

其中选项option子句的语法为。

scss 复制代码
ANALYZE [ boolean ] | 
ANALYSE [ boolean ] | 
VERBOSE [ boolean ] |
COSTS [ boolean ] | 
CPU [ boolean ] | 
BUFFERS [ boolean ] | 
TIMING [ boolean ] | 
PLAN [ boolean ] |
FORMAT { TEXT | XML | JSON | YAML }
  • 显示SQL语句的执行计划,且要按顺序给出选项。
ini 复制代码
EXPLAIN { [ { ANALYZE | ANALYSE } ] [ VERBOSE ] | PERFORMANCE } statement;

其中参数说明

参数名 类型 含义 取值范围
statement ------ 指定要分析的SQL语句。 ------
ANALYZE、ANALYSE boolean 显示实际运行时间和其他统计数据。 TRUE(缺省值):显示实际运行时间和其他统计数据。FALSE:不显示。
VERBOSE boolean 显示有关计划的额外信息。 TRUE(缺省值):显示额外信息。FALSE:不显示。
COSTS boolean 包括每个规划节点的估计总成本,以及估计的行数和每行的宽度。 TRUE(缺省值):显示估计总成本和宽度。FALSE:不显示。
CPU boolean 打印CPU的使用情况的信息。 TRUE(缺省值):显示CPU的使用情况。FALSE:不显示。
BUFFERS boolean 包括缓冲区的使用情况的信息。 TRUE:显示缓冲区的使用情况。FALSE(缺省值):不显示。
TIMING boolean 包括实际的启动时间和花费在输出节点上的时间信息。 TRUE(缺省值):显示启动时间和花费在输出节点上的时间信息。FALSE:不显示。
PLAN boolean 是否将执行计划存储在plan_table中。当该选项开启时,会将执行计划存储在PLAN_TABLE中,不打印到当前屏幕,因此该选项为on时,不能与其他选项同时使用。 ON(缺省值):将执行计划存储在plan_table中,不打印到当前屏幕。执行成功返回EXPLAIN SUCCESS。OFF:不存储执行计划,将执行计划打印到当前屏幕。
FORMAT ------ 指定输出格式。 取值范围:TEXT、XML、JSON和YAML。默认值:TEXT。
PERFORMANCE ------ 使用此选项时,即打印执行中的所有相关信息。 ------

示例:EXPLAIN SELECT * FROM employees WHERE salary > 10000;

上述示例仅输出展示优化器预估的执行步骤,但不实际执行查询。

示例:EXPLAIN ANALYZE SELECT * FROM employees WHERE salary > 10000;

添加 ANALYZE 选项会真实执行查询,并反馈实际耗时和行数:

2.2 执行计划解读

以下是一个典型的执行计划示例:

ini 复制代码
QUERY PLAN
---------------------------------------------------------------------
Seq Scan on employees  (cost=0.00..25.88 rows=500 width=56)
 Filter: (salary > 10000)
 Buffers: shared hit=5

解读:

Seq Scan 表示全表扫描。

cost表示成本,格式为 启动成本..总成本,单位是抽象的计算单位。

rows表示优化器估算的返回行数。

width表示数据宽度,每行的平均字节数。

Filter理解为过滤器,就是在扫描时应用的过滤条件。

Buffers意为缓存,示例中shared hit=5 表示从缓存读取了 5 个块。

2.3 常见的操作类型

Seq Scan:全表扫描,逐行读取数据。无可用索引或小表查询

Index Scan:通过索引定位数据,再回表查询。等值查询或范围查询。

Index Only Scan:仅扫描索引,无需回表。查询列全部包含在索引中。

Hash Join:使用哈希表实现表连接。大表连接,内存充足。

Nested Loop:嵌套循环连接,适合小数据集。小表驱动大表。

Sort:排序操作,可能使用内存或磁盘临时文件。ORDER BY 或 GROUP BY。

2.4 执行计划优化策略

1)索引优化

避免全表扫描:为高频过滤字段添加索引。

覆盖索引:包含查询所需的所有列,减少回表开销。

复合索引:根据查询条件顺序创建多列索引。

2)统计信息更新

优化器依赖统计信息生成计划,需定期更新

3)参数调优

work_mem:增加内存分配,避免排序和哈希操作写磁盘。

shared_buffers:增加数据库缓存

执行计划是数据库性能优化的"地图",通过分析 GBase 8c 的执行计划,可以精准定位慢查询的根源。本文通过基础概念解析、案例和优化策略,展示了从获取计划到解决问题的完整链路。实际应用中需结合统计信息、硬件资源和业务需求,持续迭代优化方案。掌握执行计划的解读能力,是每一位数据库开发者和运维人员的必备技能。

原文链接:www.gbase.cn/community/p...

更多精彩内容尽在南大通用GBase技术社区,南大通用致力于成为用户最信赖的数据库产品供应商。

相关推荐
农民也会写代码几秒前
dedecms织梦arclist标签noflag属性过滤多个参数
开发语言·数据库·sql·php·dedecms
m0_748232926 分钟前
你还在手动画ER图吗?让SQL自动生成ER图,轻松解决作业难题!
数据库·sql·oracle
清流君9 分钟前
【MySQL】数据库 Navicat 可视化工具与 MySQL 命令行基本操作
数据库·人工智能·笔记·mysql·ue5·数字孪生
邂逅岁月9 分钟前
MySQL表的增删改查初阶(下篇)
数据库·sql·mysql
Python_金钱豹10 分钟前
Text2SQL零代码实战!RAGFlow 实现自然语言转 SQL 的终极指南
前端·数据库·sql·安全·ui·langchain·机器人
静听夜半雨12 分钟前
CANoe入门——3、新建LIN工程及LIN DataBase(LDF文件)的创建
网络·数据库·c++·编辑器
DarkAthena1 小时前
【ORACLE】记录一些ORACLE的merge into语句的BUG
数据库·oracle·bug
大新新大浩浩2 小时前
arm64适配系列文章-第三章-arm64环境上mariadb的部署
数据库·arm·mariadb
聪明的墨菲特i2 小时前
SQL进阶知识:九、高级数据类型
xml·数据库·sql·mysql·json·空间数据类型
oioihoii2 小时前
金仓数据库 KingbaseES 产品深度优化提案:迈向卓越的全面升级
数据库·性能优化·金融·金仓数据库 2025 征文·数据库平替用金仓