首页 > 数据库 >达梦数据库SQL执行计划查看方法

达梦数据库SQL执行计划查看方法

时间:2022-10-09 18:35:59浏览次数:54  
标签:VARCHAR 数据库 计划 SQL 执行 达梦

SQL优化作为DBA日常主要工作内容,分析SQL的执行计划,是必须要掌握的知识点。执行计划体现了SQL在数据库中的执行方式,SQL语句按照什么样的方式执行,是由优化器决定的。达梦数据库也是一样,SQL语句是由优化器设计执行方式的。达梦数据库提供了2个命令来进行分析SQL的执行计划,分别为explain和explain for,下面我们分别进行介绍。
1、使用EXPLAIN分析执行计划
达梦数据库提供explain命令查看SQL的执行计划,命令使用语法格式为:EXPLAIN <SQL 语句>;
执行计划显示方式与Oracle类似,执行计划的执行顺序也是与Oracle类似,如果能看懂Oracle数据库的执行计划,看达梦数据库的执行计划就非常容易了,主要的难度就是达梦数据库SQL执行计划的操作符与Oracle是不一样的,达梦数据库也是提供了V$SQL_NODE_NAME视图,供大家查看每个操作符的含义,当然,也可以直接去官方手册《DM8系统管理员手册》-附录4执行计划操作符章节来查每个操作符的含义。达梦数据库SQL执行计划的执行过程为:控制流从上到下传递,数据流从下到上传递。

1 #NSET2: [0, 16, 9]
2   #PRJT2: [0, 16, 9]; EXP_NUM(2), IS_ATOM(FALSE)
3     #NEST LOOP INDEX JOIN2: [0, 16, 9]
4       #CSCN2: [0, 4, 5]; INDEX33555535(B)
5       #SSEK2: [0, 4, 0]; SCAN_TYPE(ASC), IDX_T1_C1 (A),
SCAN_RANGE[T2.D1,T2.D1]

例如,如上的执行计划大致执行流程如下:

  1. CSCN2: 扫描 T2 表的聚集索引,数据传递给父节点索引连接;
  2. NEST LOOP INDEX JOIN2: 当左孩子有数据返回时取右侧数据;
  3. SSEK2: 利用 T2 表当前的 D1 值作为二级索引 IDX_T1_C1 定位查找的 KEY,返回结果给父节点;
  4. NEST LOOP INDEX JOIN2: 如果右孩子有数据则将结果传递给父节点 PRJT2,否则继续取左孩子的下一条记录;
  5. PRJT2: 进行表达式计算 C1+1, D2;
  6. NSET2: 输出最后结果;
  7. 重复过程 1) ~ 4)直至左侧 CSCN2 数据全部取完。
    2、使用EXPLAIN FOR分析执行计划
    EXPLAIN FOR 语句也用于查看 SQL语句的执行计划,不过执行计划以结果集的方式返回。EXPLAIN FOR 显示的执行计划信息相比于EXPLAIN更加丰富,除了常规计划信息,还包括创建索引建议、分区表的起止分区信息等。重要的是,语句的计划保存在数据表中,方便用户随时查看,进行计划对比分析,可以作为性能分析的一种方法。
    语法格式为:EXPLAIN [AS 计划名称] FOR <SQL 语句>;
    需要注意的是,explain for将语句的执行计划保存在"SYSDBA"."##PLAN_TABLE"表中,而这个表是个临时表,且是会话级的,如果需要永久保存执行计划,需要将该表中的信息转储到其他永久表中,如下是该表的创建语句,从语句末尾可以看到给表的属性。
CREATE GLOBAL TEMPORARY TABLE "SYSDBA"."##PLAN_TABLE"
(
"PLAN_ID" INT,
"PLAN_NAME" VARCHAR(128),
"CREATE_TIME" DATETIME(6),
"LEVEL_ID" INT,
"OPERATION" VARCHAR(30),
"TAB_NAME" VARCHAR(128),
"IDX_NAME" VARCHAR(128),
"SCAN_TYPE" VARCHAR(20),
"SCAN_RANGE" VARCHAR(128),
"ROW_NUMS" BIGINT,
"BYTES" INT,
"COST" BIGINT,
"CPU_COST" BIGINT,
"IO_COST" BIGINT,
"FILTER" VARCHAR(1000),
"JOIN_COND" VARCHAR(1000),
"ADVICE_INFO" VARCHAR(1000),
"PSTART" INT,
"PSTOP" INT)
ON COMMIT PRESERVE ROWS STORAGE(ON TEMP);

ON COMMIT PRESERVE ROWS:指定临时表是会话级的,会话结束时会清空表。

标签:VARCHAR,数据库,计划,SQL,执行,达梦
From: https://www.cnblogs.com/stone469/p/16773216.html

相关文章

  • mysql 查询生成对账单 当前数据为上条数据累计
    需求思路:期初数据做个对账开始时间之前的数据,查询时以时间为排序条件查询分别做出收款核销期初等基础数据SELECT billdate,CASE WHENtradetypecode='D2'......
  • mysql5.7开启慢查询日志找出哪些sql查询慢
    因为慢查询日志等....日志都是耗性能及空间的,所以这里我只是临时开启连接上mysql,执行以下sqlshowvariableslike"%slow_query_log%";--查看慢查询相关变量setglob......
  • mysql中锁的分类
    1.按照锁的粒度分类:行级锁(Innodb)(记录锁,间隙锁,临键锁),页级锁(Innodb,MyIsam),表级锁(Innodb)2.按照锁的属性分类:共享锁(读锁),排他锁(写锁)3.按照锁的状态分类:意向共享锁,意向排他锁行......
  • 数据库系统体系复习
    SQL和优化sql执行过程:1:SQL解析语法检查语义检查:语句是否有意义,例如,语句中的表和列是否存在2:解析器:将SQL接口传递过来的SQL语句进行解析,翻译成MySQL自己能......
  • UData查询引擎优化-如何让一条SQL性能提升数倍
    1UData-解决数据使用的最后一公里1.1背景在大数据的范畴,我们经历了数据产业化的历程,从各个生产系统将数据收集起来,经过实时和离线的数据处理最终汇集在一起,成为我们的主题......
  • SpringBoot实现Mysql读写分离
    前言在高并发的场景中,关于数据库都有哪些优化的手段?常用的有以下的实现方法:读写分离、加缓存、主从架构集群、分库分表等,在互联网应用中,大部分都是读多写少的场景,设置......
  • Mysql 插入中文错误:Incorrect string value: '\xE7\xA8\x8B\xE5\xBA\x8F...' fo
     今天mysql遇到了一点问题。 首先我说一下,mysql安装的话默认编码方式是拉丁文。不是 UTF-8. 这个错误原因就是因为编码格式不一致造成的。  简单粗暴一点,重新建一个......
  • MySQL慢查询优化
    日常开发中,我们经常会遇到数据库慢查询。那么导致数据慢查询都有哪些常见的原因?今天就跟大家聊聊导致数据库慢查询的12个常见原因,以及对应的解决方法。   1.SQL......
  • 【博学谷学习记录】超强总结,用心分享|MySql连接查询超详细总结
    一、概述在实际开发中,大部分情况下都不是在单表中进行数据操作,一般都是多张表进行联合查询。通常一个业务就会对应的有好几张表。MySql中的连接查询分为交叉连接,内连......
  • Greenplum数据库数据分片策略Hash分布——执行器行为
    Greenplum数据库Hash分布执行器部分主要涉及Motion、Result和SplictUpdate节点。以使用CdbHash*makeCdbHash(intnumsegs,intnatts,Oid*hashfuncs)创建一个CdbHash结......