达梦数据库系列—40.执行计划

news2025/1/24 5:05:07

目录

优化器

执行计划

操作符

执行过程


优化器

查询优化器通过分析可用的执行方式和查询所涉及的对象统计信息来生成最优的执行计划。此外,如果存在 HINT 优化提示,优化器还需要考虑优化提示的因素。

查询优化器的处理过程包括:

1.优化器生成所有可能的执行计划集合;

2.优化器基于字典信息的数据分布统计值、执行语句涉及到的表、索引和分区的存储特点来估算每个执行计划的代价。代价是指 SQL 语句使用某种执行方式所消耗的系统资源的估算值。其中,系统资源消耗包括 I/O、CPU 使用情况、内存消耗等;

3.优化器选择代价最小的执行方式作为该条语句的最终执行计划。

优化器所做的操作有:查询转换、估算代价、生成计划。

执行计划

生成计划指计划生成器对给定的查询按照连接方式、连接顺序、访问路径生成不同的执行计划,选择代价最小的一个作为最终的执行计划。

查看执行计划

  1. 通过EXPLAIN命令查看
  2. 通过管理工具查看

操作符

CSCN :基础全表扫描(a),从头到尾,全部扫描

SSCN :二级索引扫描(b), 从头到尾,全部扫描

SSEK :二级索引范围扫描(b) ,通过键值精准定位到范围或者单值

CSEK :聚簇索引范围扫描 ,通过键值精准定位到范围或者单值

BLKUP :根据二级索引的ROWID 回原表中取出全部数据(b + a)

NSET:用于结果集收集的操作符,一般是查询计划的顶层节点

PRJT:关系的“投影”(project)运算,用于选择表达式项的计算;

SLCT:关系的“选择” 运算,用于查询条件的过滤。

AAGR:简单聚集,用于没有group by的count sum age max min等聚集函数的计算

FAGR:快速聚集,用于没有过滤条件时从表或索引快速获取MAX/MIN/COUNT值

HAGR:分组聚集,用于分组列没有索引只能走全表扫描的分组聚集,C2列没有创建索引

SAGR:流分组聚集,用于分组列是有序的情况下,可以使用流分组聚集,C1上已经创建了索引,SAGR2性能优于HAGR2

准备测试表和数据

DROP TABLE T1;

DROP TABLE T2;

CREATE TABLE T1(C1 INT ,C2 CHAR(1),C3 VARCHAR(10) ,C4 VARCHAR(10) );

CREATE TABLE T2(C1 INT ,C2 CHAR(1),C3 VARCHAR(10) ,C4 VARCHAR(10) );

INSERT INTO T1

SELECT LEVEL C1,CHR(65+MOD(LEVEL,57)) C2,'TEST',NULL FROM DUAL

CONNECT BY LEVEL<=10000;

INSERT INTO T2

SELECT LEVEL C1,CHR(65+MOD(LEVEL,57)) C2,'TEST',NULL  FROM DUAL

CONNECT BY LEVEL<=10000;

CREATE INDEX IDX_C1_T1 ON T1(C1);

SP_INDEX_STAT_INIT(USER,'IDX_C1_T1');

CSCN 全表扫

explain select * from t1 where c2='test';

BLKUP 回表查找

EXPLAIN SELECT * FROM T1 WHERE C1=10;

SSEK 索引范围扫

explain select c1 from t1 where c1 < 100;

SSCN 索引全表扫

explain select c1 from t1;

CSEK 聚簇索引扫

CREATE CLUSTER INDEX IDX_C1_T2  ON T2(C1);

EXPLAIN SELECT * FROM T2 WHERE C1=10;

AAGR 简单聚集 没有groupby的简单聚集

EXPLAIN SELECT COUNT(*) FROM T1 WHERE C1 = 10;

FAGR 快速聚集 没有过滤条件

EXPLAIN SELECT COUNT(*) FROM T1 ;

HAGR HASH分组聚集 没有走索引的groupby

EXPLAIN SELECT COUNT(*) FROM T1 GROUP BY C2;

SAGR 流分组聚集 有索引的groupby

EXPLAIN SELECT COUNT(*) FROM T1 GROUP BY C1;

执行过程

建表和建索引语句:

    CREATE TABLE T1(C1 INT,C2 CHAR);

    CREATE TABLE T2(D1 INT,D2 CHAR);

    CREATE  INDEX  IDX_T1_C1  ON  T1(C1);

    INSERT INTO T1 VALUES(1,'A');

    INSERT INTO T1 VALUES(2,'B');

    INSERT INTO T1 VALUES(3,'C');

    INSERT INTO T1 VALUES(4,'D');

    INSERT INTO T2 VALUES(1,'A');

    INSERT INTO T2 VALUES(2,'B');

    INSERT INTO T2 VALUES(5,'C');

    INSERT INTO T2 VALUES(6,'D');

执行计划:

  EXPLAIN SELECT A.C1+1,B.D2 FROM T1 A, T2 B WHERE A.C1 = B.D1;

执行过程

控制流从上向下传递,数据流从下向上传递。[1,12,56]分别表示估算的操作符代价(毫秒)、处理的记录行数和每行记录的字节数。

该计划的大致执行流程如下:

1.CSCN2,扫描 T2 表的聚集索引,结果返回给父节点;

2.父节点NEST LOOP将数据作为左孩子,取右侧数据

3.SSEK2,利用T2表的D1列索引IDX_T1_C1,结果返回给父节点;

4.父节点NEST LOOP将数据作为右孩子,将连接结果返回PRJT2

5.PRJT2:进行表达式计算 C1+1, D2;

6.NSET2: 输出最后结果;

7.重复以上,至CSCN2 数据全部取完。

达梦技术社区:达梦数据库 - 新一代大型通用关系型数据库 | 达梦在线服务平台

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

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

相关文章

手摸手教你撕碎西门子S7通讯协议14--开发自己的通讯库读数据

1、S7通讯回顾 - &#xff08;1&#xff09;建立TCP连接 Socket.Connect- - &#xff08;2&#xff09;发送访问请求 COTP- - &#xff08;3&#xff09;交换通信信息 Setup Communication- - &#xff08;4&#xff09;执行相关操作 读、写、PLC启停、时间…

【Android】DrawerLayout+NavigationView实现侧滑菜单页面

【Android】DrawerLayoutNavigationView实现侧滑菜单页面 在 Android 开发中&#xff0c;侧滑菜单是一个非常常见的用户界面模式&#xff0c;它能够在屏幕的一侧显示一个导航菜单&#xff0c;允许用户通过滑动手势或点击按钮来访问不同的应用功能。本文将介绍如何使用 DrawerL…

网页UI设计工具全攻略:九大精选

如果担心不知道如何进行网站 UI 设计、设计网站和编辑网页技术程序&#xff0c;很多人会选择快速方便的 Wix 建设。然而&#xff0c;如果你想建立一个最合适的网站&#xff0c;使用一个功能强大、资源丰富的网站 UI 设计工具仍然是您的最佳选择。网站设计中的 UI 设计不同于一般…

你是否知道Vue的data两种不同定义区别呢?

在做vue项目的时候&#xff0c;虽然vue3出来了一段时间了&#xff0c;vue2已经官方宣布不再维护了&#xff0c;然而我们有些旧项目原来是用的vue2的&#xff0c;那么用了那么久的vue2&#xff0c;不知道你是否有注意到&#xff0c;vue2我们往往会在根文件定义了一个对象形式的d…

类似redmine的项目管理系统有哪些?10款软件测评

国内外主流的10款类似redmine项目管理系统对比&#xff1a;PingCode、Worktile、TAPD、OpenProj、禅道&#xff08;ZenTao&#xff09;、Teambition、JIRA、Asana、Basecamp、Wrike。 在项目管理领域&#xff0c;选择一个既能满足需求又易于操作的工具是每个团队都面临的挑战。…

利用SOLIDWORKS CAD 2024新功能 提高团队工作效率

随着科技的不断发展&#xff0c;CAD&#xff08;计算机辅助设计&#xff09;软件在各行业中的应用越来越广泛&#xff0c;尤其在机械、汽车、航空航天、电子设备等领域。SOLIDWORKS作为一款功能强大的CAD软件&#xff0c;一直在不断更新和优化&#xff0c;以适应不断变化的市场…

【区块链】控制台的配置、操作及常用命令②

常用命令-账户管理 常用命令-区块信息 在控制台中编译部署智能合约 启动节点 在fisco目录下 bash nodes/127.0.0.1/start_all.sh启动控制台 cd ~/fisco/console && bash start.sh部署合约 deploy HelloWorldtransaction hash: 交易的哈希值 contract address&#x…

plugin ‘ROS2‘: loading...error CoppeliaSim和ROS2插件问题

问题 装了24年最新版本ROS2 Jazzy但是仿真软件打开出bug&#xff0c;怎么办&#xff1f; 等支持的出来&#xff0c;完全可以。但是&#xff0c;如果需要用&#xff0c;那调整一下即可。 CoppeliaSim&#xff08;V-Rep&#xff09;和ROS2的使用说明_coppeliasim编译-CSDN博客…

【网络】HTTP协议——应用层协议、URL、HTTP协议格式、HTTP的方法、HTTP的状态码、HTTP常见Header

文章目录 Linux网络1. 应用层2. HTTP协议2.1 URL2.2 urlencode和urdecode2.3 HTTP协议格式2.4 HTTP的方法2.5 HTTP的状态码2.6 HTTP常见Header Linux网络 1. 应用层 应用层是 OSI 七层模型或 TCP/IP 四层模型中的最高层&#xff0c;它直接为用户的应用程序提供服务。 应用层的…

MySQL数据库-SQL编程

一、触发器 1.触发器简介 触发器&#xff08;trigger&#xff09;是一个特殊的存储过程&#xff0c;它的执行不是由程序调用&#xff0c;也不是手工启动&#xff0c;而是由事件来触发&#xff0c;比如当对一个表进行操作&#xff08; insert&#xff0c;delete&#xff0c; u…

【C++标准库】模拟实现string类

模拟实现string类 一.命名空间与类成员变量二.构造函数1.无参&#xff08;默认&#xff09;构造2.有参构造3.兼容无参和有参构造4.拷贝构造1.传统写法2.现代写法 三.析构函数四.string类对象的容量操作1.size2.capacity3.clear4.empty5.reserve6.resize 五.string类对象的访问及…

傅里叶变换与FFT应用

一、傅里叶变换 1.1 变换 我们先给例子&#xff0c;假设在直角坐标系上有A(2,1),B(1,2);数和图之间存在的关系&#xff0c;称作变换&#xff1b;在图上我们想找对角线C&#xff0c;通过计算我们就知道C(3,3)&#xff1b;我们知道&#xff0c;在坐标系上有单位向量&#xff0c;…

Python 【机器学习】 进阶 之 【实战案例】房价数据中位数分析 之 [ 选择并训练模型 ] [ 模型微调 ] | 3/3(含分析过程)

Python 【机器学习】 进阶 之 【实战案例】房价数据中位数分析 之 [ 选择并训练模型 ] [ 模型微调 ] | 3/3&#xff08;含分析过程&#xff09; 目录 Python 【机器学习】 进阶 之 【实战案例】房价数据中位数分析 之 [ 选择并训练模型 ] [ 模型微调 ] | 3/3&#xff08;含分析…

Vue使用flex将图片并排居中且左对齐

先看效果&#xff1a; 在看代码 <template><div class"outer"><div class"inner"><div classeach_image v-for"(item,index) in image_list" :key"index"><img class"image_class" src"./…

培训孵化公司必备ERP的系统,跟卖和铺货以及订单物流发货打包

培训孵化必备的 ERP 系统&#xff0c;贴牌定制独立部署&#xff0c;跟卖铺货&#xff0c;物流对接。 说说新手与培训孵化学员如何使用 ERP&#xff01; 1. ERP 系统对于新手来说非常简单且容易操作&#xff0c;上面的跟卖功能很全面。比如铺货方面&#xff0c;可以采集 1688、…

发现SOLIDWORKS设计活页夹

您有没有遇到过将模型文件转交给同事时丢失附件的文档信息的&#xff1f;您有没有遇到过您的业务同事使用您的模型时仍然搞不清模型和业务项目之间的关系&#xff1f; 在纸制图纸的“旧时代”中&#xff0c;会有一整套信息&#xff08;文档或者表格&#xff09;与模型和图纸一…

电路原理--基础电路工具

1.正弦信号激励下的动态电路分析法-----频域相量法 课本第六章269页。 2.阻抗 3.滤波器简单理解 先介绍下滤波&#xff0c;芯片和元器件在相互工作的时候&#xff0c;会相互影响&#xff0c;在线路上产生寄生电阻或者寄生电容&#xff0c;这种现象叫耦合&#xff0c;耦合会带…

2024 巴黎奥运会:科技点亮体育盛会

一、引言 巴黎奥运会作为全球瞩目的体育盛事&#xff0c;承载着深厚的历史与文化底蕴。它不仅是运动员们展现卓越竞技能力的舞台&#xff0c;也是科技成果大放异彩的平台。科技在巴黎奥运会中的地位举足轻重&#xff0c;为赛事的各个方面带来了革新与突破。 从赛事的筹备到运…

Threejs中导入GLTF模型克隆后合并

很多场景中会需要同一个模型很多次&#xff0c;但是如果多次加载同一个模型会占用很高的带宽&#xff0c;导致加载很慢&#xff0c;因此就需要使用clone&#xff0c;也就是加载一个模型后&#xff0c;其他需要使用的地方使用clone的方式复制出多个同样的模型&#xff0c;再改变…