• 全部
  • 经验案例
  • 典型配置
  • 技术公告
  • FAQ
  • 漏洞说明
  • 全部
  • 全部
  • 大数据引擎
  • 知了引擎
产品线
搜索
取消
案例类型
发布者
是否解决
是否官方
时间
搜索引擎
匹配模式
高级搜索

[MVS]KINGBASE 执行计划介绍

2025-05-30 发表
  • 0关注
  • 0收藏 59浏览
粉丝:2人 关注:5人

问题描述

KINGBASE 执行计划介绍

解决方法

一、执行计划介绍

1、SQL执行过程

SQL 语句的执行过程:当客户端程序发出SQL 语句,数据库后端服务进程接收到 SQL 语句后,调用解析器 (parser) 进行语法分析和词法分析,生成一棵语法树。语法树被转交给分析器(analyzer), 进行语义分析,生成查询树。查询树被转交给查询重写器,基于规则进行查询重写,生成了一棵重写后的查询树。重写后的查询树转交给优化器(optimizer), 生成一个高度优化的执 行计划。执行计划转交给执行器(executor), 产生最终结果,由数据库后端服务进程将查询结果转交给客户端程序。

数据库对于每种操作要考虑两类代价:磁盘I/O代价和CPU代价 。
数据库的执行器采用流水线形式进行操作结果的传递,数据库总代价分成两部分:启动代价(startup cost)和运行代价(run cost)。

  • 启动代价是操作节点阻塞执行时的时间,在这段时间内,该操作节点不会向上层传递任何结果。
  • 运行代价是操作节点从输出第一条结果开始,到整个节点操作完毕的时间。

2、查看SQL执行计划

数据库的SQL语句执行计划是由完成该 SQL 语句的多个操作组成的操作树,每个操作是操作树中的一个节点,针对每一个操作节点,主要包括以下描述信息。

  1. 操作的名称,如各种扫描操作、连接操作、排序、聚集等。
  2. 操作的对象,如表、索引等。
  3. 对该操作的代价估算。

EXPLAIN 命令主要有两种执行方式。

  1. 使用EXPLAIN SQL获取执行计划,输出将只显示 SQL 语句的执行计划,SQL 语句并不真正执行。
  2. 使用EXPLAIN ANALYZESQL 获取执行计划,除了显示 SQL 语句的执行计划外,还会实际执行该SQL语句,并显示实际运行时间等详细信息。

示例:

生成执行计划; system@test=# explain select count(*) from test_orders; QUERY PLAN ----------------------------------------------------------------------------------------------- Finalize Aggregate (cost=17572.55..17572.56 rows=1 width=8) -> Gather (cost=17572.33..17572.54 rows=2 width=8) Workers Planned: 2 -> Partial Aggregate (cost=16572.33..16572.34 rows=1 width=8) -> Parallel Seq Scan on test_orders (cost=0.00..15530.67 rows=416667 width=0) (5 rows) 实际执行并生成执行计划; SQL> EXPLAIN ANALYZE select * from t1;

执行计划中常见参数介绍:

  1. cost: 显示查询计划的代价估算值。 cost有两个值: 一个值表示获取该操作第1条结果的代价,即启动代价;另一个值是该操作执行完成的总代价。
  2. rows: 表示估计的结果集行数或返回实际结果数。
  3. width:表示估计的结果集中每个元组的宽度。
  4. actual time: 显示该操作真正执行的代价值,包括启动代价和总代价。
  5. loops: 表示该操作循环执行的次数。

3、常见查询方式介绍

单表查询

  1. 全表顺序扫描(seq scan):该操作扫描表中的每个数据页面,并逐行检查每个元组是否满足过滤条件。
  2. 索引扫描(index scan): 首先根据索引键查找满足条件的索引项,然后再根据索引项指向数据表中元组的指针,找到相关的元组。
  3. 只索引扫描(index only scan): 从索引中直接获取所需的列,无须访问表的行 数据。
  4. 位图扫描(bitmap scan): 该执行方式包括两个步骤。
    • 1)位图索引扫描(bitmap index scan): 首先使用索引扫描,找到满足索引键的所有索引项。
    • 2)位图堆扫描(bitmap heap scan):把所获得的索引项指向数据表中元组的指针,进行排序,然后根据指针在表中找到指定的元组。

多表连接查询

  1. 嵌套循环连接(nested loop): 对外表中的每一行元组,扫描一遍内表,构造新元组,如果满足条件,则作为结果元组输出。
  2. 归并连接(merge join): 通常用于等值连接操作,如果进行连接的两个表在连接属性上已经排序,则使用归并连接算法进行连接操作具有比较好的性能。
  3. 哈希连接(hash join): 通常用于等值连接操作,对其中的 一个表创建哈希表,对另外 一个表的元组进行探测,满足条件则输出结果元组。

分组聚集查询

  1. 先排序,然后对有序的输入流进行分组聚焦计算。
  2. 使用哈希表进行分组,然后再进行聚焦计算。
    • (1)Sort 操作:根据排序键进行排序。
    • (2)Materialize 物化操作:把中间结果集写到外存文件中。
    • (3)GroupAggregate 分组聚集操作:根据分组键进行聚集操作,如计算总和、平均 值等。

子查询

  1. 把子查询转换成连接操作。
  2. 把子查询单独处理成子计划。

该案例对您是否有帮助:

您的评价:1

若您有关于案例的建议,请反馈:

0 个评论

该案例暂时没有网友评论

编辑评论

举报

×

侵犯我的权益 >
对根叔知了社区有害的内容 >
辱骂、歧视、挑衅等(不友善)

侵犯我的权益

×

泄露了我的隐私 >
侵犯了我企业的权益 >
抄袭了我的内容 >
诽谤我 >
辱骂、歧视、挑衅等(不友善)
骚扰我

泄露了我的隐私

×

您好,当您发现根叔知了上有泄漏您隐私的内容时,您可以向根叔知了进行举报。 请您把以下内容通过邮件发送到pub.zhiliao@h3c.com 邮箱,我们会尽快处理。
  • 1. 您认为哪些内容泄露了您的隐私?(请在邮件中列出您举报的内容、链接地址,并给出简短的说明)
  • 2. 您是谁?(身份证明材料,可以是身份证或护照等证件)

侵犯了我企业的权益

×

您好,当您发现根叔知了上有关于您企业的造谣与诽谤、商业侵权等内容时,您可以向根叔知了进行举报。 请您把以下内容通过邮件发送到 pub.zhiliao@h3c.com 邮箱,我们会在审核后尽快给您答复。
  • 1. 您举报的内容是什么?(请在邮件中列出您举报的内容和链接地址)
  • 2. 您是谁?(身份证明材料,可以是身份证或护照等证件)
  • 3. 是哪家企业?(营业执照,单位登记证明等证件)
  • 4. 您与该企业的关系是?(您是企业法人或被授权人,需提供企业委托授权书)
我们认为知名企业应该坦然接受公众讨论,对于答案中不准确的部分,我们欢迎您以正式或非正式身份在根叔知了上进行澄清。

抄袭了我的内容

×

原文链接或出处

诽谤我

×

您好,当您发现根叔知了上有诽谤您的内容时,您可以向根叔知了进行举报。 请您把以下内容通过邮件发送到pub.zhiliao@h3c.com 邮箱,我们会尽快处理。
  • 1. 您举报的内容以及侵犯了您什么权益?(请在邮件中列出您举报的内容、链接地址,并给出简短的说明)
  • 2. 您是谁?(身份证明材料,可以是身份证或护照等证件)
我们认为知名企业应该坦然接受公众讨论,对于答案中不准确的部分,我们欢迎您以正式或非正式身份在根叔知了上进行澄清。

对根叔知了社区有害的内容

×

垃圾广告信息
色情、暴力、血腥等违反法律法规的内容
政治敏感
不规范转载 >
辱骂、歧视、挑衅等(不友善)
骚扰我
诱导投票

不规范转载

×

举报说明

提出建议

    +

亲~登录后才可以操作哦!

确定

亲~检测到您登陆的账号未在http://hclhub.h3c.com进行注册

注册后可访问此模块

跳转hclhub

你的邮箱还未认证,请认证邮箱或绑定手机后进行当前操作