1、HINT之OUTER_JOIN_FLATING_FLAG

(1)、解释:

Flag of indicating whether outer join will be flattened。
对左外连接是否进行平坦化处理。

(2)、参数值:

0(默认关闭),1(开启)

(3)、查询此参数当前值

SELECT * FROM V$DM_INI WHERE PARA_NAME=‘OUTER_JOIN_FLATING_FLAG’

2、准备测试环境

(1)、建表及生成数据

CREATE TABLE FLATING_T1(A1 INT,A2 INT);
CREATE TABLE FLATING_T2(B1 INT,B2 INT);
CREATE TABLE FLATING_T3(C1 INT,C2 INT);INSERT INTO FLATING_T1 SELECT LEVEL,LEVEL FROM DUAL CONNECT BY LEVEL<=10;
INSERT INTO FLATING_T2 SELECT LEVEL,LEVEL FROM DUAL CONNECT BY LEVEL<=100000;
INSERT INTO FLATING_T3 SELECT LEVEL,LEVEL FROM DUAL CONNECT BY LEVEL<=100000;
COMMIT;

(2)、收集统计信息

DBMS_STATS.GATHER_TABLE_STATS(‘SYSDBA’,‘FLATING_T1’,NULL,100);
DBMS_STATS.GATHER_TABLE_STATS(‘SYSDBA’,‘FLATING_T2’,NULL,100);
DBMS_STATS.GATHER_TABLE_STATS(‘SYSDBA’,‘FLATING_T3’,NULL,100);

3、测试案例

不讨论返回结果集行数和代价估算对不对的问题。

(1)、达梦默认处理方式

FLATING_T1左外连接FLATING_T2再和FLATING_T3进行交叉连接:10*100000=1000000

执行计划执行顺序:8》7》9》6》5》4》3》2》1

EXPLAIN SELECT COUNT(*) FROM FLATING_T1 LEFT JOIN FLATING_T2 CROSS JOIN FLATING_T3 ON A1=B1;

[执行语句1]:

SELECT COUNT(*) FROM FLATING_T1 LEFT JOIN FLATING_T2 CROSS JOIN FLATING_T3 ON A1=B1;
执行成功, 执行耗时123毫秒. 执行号:43

(2)、禁用变量改写

上面的执行计划中,达梦用了变量改写的方式实现连接,需要加HINT禁用,避免影响OUTER_JOIN_FLATING_FLAG的效果。

执行计划执行顺序:7》8》6》5》4》3》2》1

先根据根索引扫出FLATING_T2和FLATING_T3的所有数据,再进行嵌套循环连接,没有条件的嵌套循环连接是以笛卡尔积的方式得出一个结果集100亿条数据,再和FLATING_T1进行HASH左外连接。

EXPLAIN SELECT /*+NO_USE_CVT_VAR*/COUNT(*) FROM FLATING_T1 LEFT JOIN FLATING_T2 CROSS JOIN FLATING_T3 ON A1=B1;

[执行语句2]:

SELECT /*+NO_USE_CVT_VAR*/COUNT(*) FROM FLATING_T1 LEFT JOIN FLATING_T2 CROSS JOIN FLATING_T3 ON A1=B1;
执行成功, 执行耗时47秒 199毫秒. 执行号:48

(3)、开启平坦化处理

执行计划执行顺序:9》8》10》7》11》6》5》4》3》2》1

FLATING_T1先去重再和FLATING_T2根据等值条件做HASH内连接得出10条数据,再和FLATING_T3进行嵌套循环连接得出100万条数,和上面的100亿的中间结果集相比小了很多,使整体的SQL效率得到了一定的提升。

EXPLAIN SELECT /*+OUTER_JOIN_FLATING_FLAG(1) NO_USE_CVT_VAR*/ COUNT(*) FROM FLATING_T1 LEFT JOIN FLATING_T2 CROSS JOIN FLATING_T3 ON A1=B1;

[执行语句3]:

SELECT /*+OUTER_JOIN_FLATING_FLAG(1) NO_USE_CVT_VAR*/ COUNT(*) FROM FLATING_T1 LEFT JOIN FLATING_T2 CROSS JOIN FLATING_T3 ON A1=B1;
执行成功, 执行耗时35毫秒. 执行号:52

达梦数据库-SQL优化之HINT-平坦化处理相关推荐

  1. 达梦数据库sql优化实践2

    Sql执行过程中,对有索引的列上使用隐式类型转换或函数都会造成索引失效的情况,需要特别注意. 原sql语句如下 SELECT TAB1.RECORDID , TAB1.F_CENTRAL_ID TAB ...

  2. java获取达梦数据库_记一次对达梦数据库的优化过程

    某年某月某日的一个下午,接收到监控服务器的一条告警短信: 尊敬的运维工程师 XX,你好: "192.168.136.200"数据库服务器 CPU 异常,CPU 使用率 98.7%, ...

  3. 达梦查询sql优化几种方式

    问题描述 在近做项目的过程中遇到了达梦查询sql 性能过慢问题,把平常在MySQL和Oracle中一些优化方法拿到达梦这边来使用,发现效果是比较小的,最终通过查阅资料发现了达梦优化sql的方式和MyS ...

  4. 达梦数据库SQL学习

    数据来源于达梦数据库安装实例时的示例库DMHR 一 分组函数 分组函数做用于一组数据.并对于一组数据返回一个值 常见的分组函数:(聚合函数) AYG.COUNT.MAX.MIN.SUM... sele ...

  5. 达梦数据库SQL日志分析工具Dmlog的使用

    1.使用条件 运行环境预先安装Java环境:支持liunx和windows系统运行. 说明:推荐使用java1.8版本,linux最小化安装最少要安装打印服务组件,windows下不支持java1.6 ...

  6. 达梦数据库SQL调优,查看执行计划、ET

    一.调优目标 SQL 调优的整体目标是使用最优的执行计划,使IO以及CPU代价最小.调优主要关注下列方面: ·表扫描 如果计划中对某大表使用了全索引扫描,那么需要关注该表是否存在某个查询条件使得过滤后 ...

  7. 【与达梦同行】达梦数据库SQL去掉sort

    SQL优化是一个比较复杂的事情,想要做好优化一要靠扎实的技术功底,二要靠丰富的实践经验,这里来谈一下SQL优化中的sort优化问题. 在之前的优化经验中,错误的任务只要结果集不大,含有order by ...

  8. 达梦数据库 sql使用学习

    1.项目里用了DATE_SUB.DATE_ADD也没有报错,是可以用的. a. 使用INTERVAL时,达梦要给时间加' ',例:INTERVAL '1' DAY; b. 如果INTERVAL的时间是 ...

  9. 达梦数据库SQL常用查询语句

    1.简单查询 语法:select () from () 第一个括号:*, column_name, alias,expr || distinct 第二个括号:table_name 2.过滤查询 Whe ...

最新文章

  1. Python 函数学习
  2. JMH和Arthas定位问题的案例分享
  3. 砂.随笔.三十一.息斯敏
  4. 全球及中国七氟二甲基辛二酸铜(II)行业竞争策略与投资前景研究报告2022版
  5. 学会对mysql的增删改查_Go实现对MySQL的增删改查
  6. [Windows Phone] 实作不同的地图显示模式
  7. 深入理解嵌入式中重要的编程模型
  8. rocketchat聊天服务器 v3.11.1
  9. linux: 命令行运行php Run PHP from the command line
  10. Objective-C路成魔【11-多态性、动态类型和动态绑定】
  11. NodeJS-001-Nodejs学习文档整理(转-出自http://www.cnblogs.com/xucheng)
  12. 除法取模与逆元/费马小定理
  13. 关于web.xml 中的 welcome-file-list 的认识
  14. Dgraph 1.2.8 发布,事务性分布式图形数据库
  15. 全网首发:VS编译的文件不在指定位置,怎么办
  16. 易宝支付php接口,【图片】易宝支付PHP版测试、懂的进【php吧】_百度贴吧
  17. 126邮箱登录html,126邮箱登陆界面
  18. Android 基础知识之 VelocityTracker使用(提供手指速度计算,可用于笔迹优化哦)
  19. C#生成与识别条形码、二维码示例 zxing、 barcodelib生成条形码 code128B等 无白边 自动宽度
  20. 获取手机IMEI/ICCID/IMSI

热门文章

  1. STM32使用串口1配合DMA接收不定长数据,大大减轻CPU载荷
  2. 计算机台式右上角三个灯作用,键盘上的三个灯分别代表什么意思 三个灯各有什么作用呢...
  3. 存储--盘古,阿里云飞天分布式存储系统设计深度解析
  4. 配置普通链接二维码规则,一直提示校验文件检查失败
  5. 麦肯锡七步成诗法(转载)
  6. 二叉树的度为2的节点和叶子节点的关系
  7. CSDN发文章显示超时请重试
  8. 只管去做:让你迅速实现增值的目标管理法
  9. 【2019 暑假JSOI Day 2 T2】小说(二分+最短路)
  10. 【愚公系列】2021年12月 攻防世界-简单题-CRYPTO-010(转轮机加密)