DM的SQL优化入门笔记

1.查看执行计划
EXPLAIN SELECT A.C1+1,B.D2 FROM T1 A, T2 B WHERE A.C1 = B.D1;

2.执行计划:
  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]

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

  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 数据全部取完。

  用户如果想了解更多关于操作符的知识,请查看动态视图 V$SQL_NODE_NAME

4.操作符名称、说明

4.1 简图

 

4.2 简图注解

4.2.1  二级索引,一般系统创建主键时生成的索引为主索引,其他为二级索引。

4.2.2 投影,一般SQL语言中的"投影"的含义是指对列的操作, 从表里选择你所要的列 ,就是投影 .比如:Select 姓名,性别 --这里就是对列的选择 ,这个就叫投影From 表

4.2.3 排序,一般都是从上至下判定,asc 时,0,2,5;desc时,5,2,0.

4.2.3 HASH内联接

(典型的联接运算,使用像 =  或 <> 之类的比较运算符)。包括相等联接和自然联接。内联接使用比较运算符根据每个表共有的列的值匹配两个表中的行。例如,检索 students和courses表中学生标识号相同的所有行。   

4.2.4 外联接

  外联接可以是左向外联接、右向外联接或完整外部联接。在 FROM子句中指定外联接时,可以由下列几组关键字中的一组指定:     

1)LEFT  JOIN或LEFT OUTER JOIN     
  左向外联接的结果集包括  LEFT OUTER子句中指定的左表的所有行,而不仅仅是联接列所匹配的行。如果左表的某行在右表中没有匹配行,则在相关联的结果集行中右表的所有选择列表列均为空值。       

2)RIGHT  JOIN 或 RIGHT  OUTER  JOIN     
  右向外联接是左向外联接的反向联接。将返回右表的所有行。如果右表的某行在左表中没有匹配行,则将为左表返回空值。       
3)FULL  JOIN 或 FULL OUTER JOIN
  完整外部联接返回左表和右表中的所有行。当某行在另一个表中没有匹配行时,则另一个表的选择列表列包含空值。如果表之间有匹配行,则整个结果集行包含基表的数据值。 
4.2.5 交叉联接   
  交叉联接返回左表中的所有行,左表中的每一行与右表中的所有行组合。交叉联接也称作笛卡尔积。

 

4.3 操作符号详情

AAGR2 简单聚集;如果没有分组(group by), 则总的就一个组,直接计算聚集函数

ACTRL 控制备用计划转换
AFUN 分析函数计算
ASCN 数组当作表来扫描
ASSERT 约束检查
BLKUP2 定位查找
BMAND 位图索引的与运算
BMCNT 位图索引的行数计算
BMCVT 位图索引的 ROWID 转换
BMMG 位图索引归并
BMOR 位图索引的或运算
BMSEK 位图索引的范围查找
CONST VALUE LIST 常量列表
CONSTC 用于复合索引跳跃扫描
CSCN2 聚集索引扫描
CSEK2 聚集索引数据定位
CTNS 用于实现全文索引的 CONTAINS
DELETE 删除数据
DELETE_REMOTE DBLINK 删除操作
DISTINCT 去重
DSCN 动态视图表扫描
DSSEK DISTINCT 列上索引跳跃扫描(单列索引或复合索引)
ESCN 外部表扫描
EXCEPT 集合的差运算,且取差集后删除重复项
EXCEPT ALL 集合的差运算,且取差集后不删除重复项
FAGR2 快速聚集,如果没有 where 条件,且取 count(*), 或者基于索引的 MAX/MIN 值,则可以快速取得集函数的值
FILL BTR 填充 B 树
FTTS MPP\LPQ 下,对临时表的优化
GSEK 空间索引查询
HAGR2 HASH 分组,并计算聚集函数
HASH FULL JOIN2 HASH 全外连接
HASH LEFT JOIN2 HASH 左外连接
HASH LEFT SEMI JOIN2 HASH 左半连接
HASH LEFT SEMI MULTIPLE
JOIN 多列 NOT IN
HASH RIGHT JOIN2 HASH 右外连接
HASH RIGHT SEMI JOIN2 HASH 右半连接
HASH RIGHT SEMI JOIN32 用于 OP SOME/ANY/ALL 的 HASH 右半连接
HASH2 INNER JOIN HASH 内连接
HEAP TABLE 临时结果表
HEAP TABLE SCAN 临时结果表扫描
HFD 删除事务性型 HUGE 表数据
HFDEL2 删除非事务性型 HUGE 表数据
HFDEL_EP MPP 下从 EP 删除非事务性型 HUGE 表数据
HFD_EP MPP 下从 EP 删除事务性型 HUGE 表数据
HFI 事务型 HUGE 表插入记录
HFI2 MPP 下优化的事务型 HUGE 表插入记录
HFINS2 非事务型 HUGE 表插入记录
HFINS3 MPP 下优化的非事务型 HUGE 表插入记录
HFINS4 非 MPP 下, 针对非事务型 HUGE 水平分区主表的插入优化,需要参数 HFINS_PARALLEL_FLAG=2
HFINS_EP MPP 下从 EP 插入非事务型 HUGE 表数据
HFI_EP MPP 下从 EP 插入事务型 HUGE 表数据
HFLKUP 根据 ROWID 检索非事务型 HUGE 表数据
HFLKUP2 根据 ROWID 检索事务型 HUGE 表数据
HFLKUP_EP MPP 下从 EP 根据 ROWID 检索非事务型 HUGE 表数据
HFLKUP2_EP MPP 下从 EP 根据 ROWID 检索事务型 HUGE 表数据
HFSCN 非事务型 HUGE 表的逐行扫描
HFSCN2 事务型 HUGE 表的逐行扫描
HFSEK 根据 KEY 检索非事务型 HUGE 表数据
HFSEK2 根据 KEY 检索事务型 HUGE 表数据
HFU 更新事务型 HUGE 表数据
HFUPD 更新非事务型 HUGE 表数据
HFUPD_EP MPP 下从 EP 更新非事务型 HUGE 表数据
HFU_EP MPP 下从 EP 更新事务型 HUGE 表数据
HIERARCHICAL QUERY 层次查询
HPM 水平分区表归并排序
INDEX JOIN LEFT JOIN2 索引左连接
INDEX JOIN SEMI JOIN2 索引半连接
INSERT 插入记录
INSERT3 MPP 下,查询插入优化处理
INSERT_LIST 堆表插入
INSERT_REMOTE DBLINK 插入操作
INTERSECT 集合的交运算,且取交集后删除重复项
INTERSECT ALL 集合的交运算,且取交集后不删除重复项
LOCAL BROADCAST 本地并行模式下,消息广播到各线程,包含必要的聚集函数合并计算
LOCAL COLLECT 本地并行下数据收集处理,代替 LOCAL GATHER
LOCAL DISTRIBUTE 本地并行模式下,消息各线程的相互重分发
LOCAL GATHER 本地并行模式下,消息收集到主线程
LOCAL SCATTER 本地并行模式下,主线程向各从线程广播消息
LOCK TID 上锁
LSET DBLINK 查询结果集
MERGE INNER JOIN3 归并内连接
MERGE SEMI JOIN3 归并半连接
MPP BROADCAST
MPP 模式下,消息广播到各站点,包含必要的聚集函数合并计算
MPP COLLECT 用于替换顶层 MPP GATHER,除了收集数据到主节点,还增加主从节点间的同步执行功能,防止从节点不断发送数据到主节点造成邮件堆积
MPP DISTRIBUTE MPP 模式下,消息各站点的相互重分发
MPP GATHER MPP 模式下,消息收集到主站点
MPP SCATTER MPP 模式下,主站点向各从站点广播消息
MSYNC MPP 下数据同步处理
MVCC CHECK 多版本检查
NCUR2 游标操作
NEST LOOP FULL JOIN2 嵌套循环全外连接
NEST LOOP INDEX JOIN2 索引内连接
NEST LOOP INNER JOIN2 嵌套循环内连接
NEST LOOP LEFT JOIN2 嵌套循环左外连接
NEST LOOP SEMI JOIN2 嵌套循环半连接
NTTS2 临时表,临时存放数据
NSET2 结果集(result set)收集,一般是查询计划的顶层节点
PARALLEL 控制水平分区子表的扫描
PIPE2 管道;先做一遍右儿子,然后执行左儿子,并把左儿子的数据向上送,直到左儿子不再有数据
PRJT2 关系的―投影‖(project)运算,用于选择表达式项的计算
PSCN 批量参数当作表来扫描
REMOTE SCAN DBLINK 远程表扫描
RN 实现 ROWNUM 查询
RNSK ROWNUM 作为过滤条件时的计算处理
SAGR2 如果输入流是有序的,则使用流分组,并计算聚集函数
SELECT INTO2 查询插入
SET TRANSACTION 事务操作(START 除外)
SLCT2 关系的―选择‖(select)运算,用于查询条件的过滤
SORT2 排序
SORT3 排序
SPL2 临时表;和 NTTS2 不同的是,它的数据集不向父亲节点传送,而是被编号,用编号和 KEY 来定位访问;而 NTTS2 的数据,主动传递给父亲节点
SSCN 直接使用二级索引进行扫描
SSEK2 二级索引数据定位
START TRANSACTION 启动会话
STAT 统计信息计算
TOPN2 取前 N 条记录
UFLT 处理 UPDATE FROM 子句
UNION UNION 计算
UNION ALL UNION ALL 运算
UNION ALL(MERGE) UNION ALL 运算(使用归并)
UNION FOR OR2 OR 过滤的 UNION 计算
UPDATE 更新数据
UPDATE_REMOTE DBLINK 更新操作

 

posted @ 2020-11-09 17:52  疾风泣影  阅读(927)  评论(0编辑  收藏  举报