记录一次SQL 查询 LEFT JOIN 相关优化

记录一次 LEFT JOIN 相关优化

  • 1 环境说明
  • 2 sql 在dm库查询用时30秒
    • 2.1 sql 语句
    • 2.2 sql 执行计划
  • 3 调优数据库参数
    • 3.1 使用hint 调整数据库参数
    • 3.2 hint 的执行计划
  • 4 永久修改数据库参数
  • 5 参数说明
  • 6 达梦数据库学习使用列表

1 环境说明

  • 某项目的公文办公系统在生产环境刚部署好 , 发现业务系统打开慢 , 使用DM性能监视器(monitor.exe) 找出相关慢sql
  • 慢sql 涉及3张表 , 三张表数据量和oracle 一样 , 一样的sql 查询语句在oracle 执行 1秒以内完成 , 在DM库需要30s
  • 数据库版本
  • oracle 11g
  • dm8.1-3-100-2024.01.15-215128-20081-ENT
表名数据量
A_INFOS11458330
FW616757
c_remotesend10496798

2 sql 在dm库查询用时30秒

2.1 sql 语句

select*
from(SELECT sum(CASE WHEN send.STATUS >= 0 THEN 1 ELSE 0 END) AS TOTAL    ,sum(CASE WHEN send.STATUS  = 1 THEN 1 ELSE 0 END) AS SIGNTOTAL,A_INFOS.BT                                                    ,A_INFOS.CWRQ                                                  ,A_INFOS.ID                                                    ,A_INFOS.MODULE_ID                                             ,A_INFOS.OBJCLASS                                              ,A_INFOS.WH                                                    ,A_INFOS.XFORM_ID                                              ,A_INFOS.MAJORUNIT                                             ,A_INFOS.NGRQ                                                  ,A_INFOS.DOCTYPEFROMA_INFOS A_INFOS --数据量11458330INNER JOIN FW FW		--数据量616757ONA_INFOS.ID = FW.INFO_IDLEFT JOIN c_remotesend send	--数据量10496798 (不带left join  查询用时 1秒, 带left join查询用时 30秒,最终结果集 2400 行数据量)ONA_INFOS.id = send.info_idWHEREA_INFOS.DOCTYPE LIKE '平行收文'AND A_INFOS.module_id = 1912587286812359AND A_INFOS.MAINUNIT  = 140683AND A_INFOS.ROWSTATE >= 0AND(('%%' = '%%')OR A_INFOS.BT LIKE '%%')AND(('%%' = '%%')OR A_INFOS.WH LIKE '%%')AND A_INFOS.CWRQ >= to_date('1900-01-01 00:00:00', 'yyyy-MM-dd HH24:mi:ss')AND A_INFOS.CWRQ <= to_date('2099-12-12 23:59:59', 'yyyy-MM-dd HH24:mi:ss')GROUP BYA_INFOS.BT       ,A_INFOS.CWRQ     ,A_INFOS.ID       ,A_INFOS.MODULE_ID,A_INFOS.OBJCLASS ,A_INFOS.WH       ,A_INFOS.XFORM_ID ,A_INFOS.MAJORUNIT,A_INFOS.NGRQ     ,A_INFOS.DOCTYPEORDER BYA_INFOS.CWRQ DESC)
whererownum <= 10

2.2 sql 执行计划

在这里插入图片描述

3 调优数据库参数

3.1 使用hint 调整数据库参数

  • enable_hash_join
  • phc_mode_enforce
  • 查询数据库参数正在使用值
SELECT * FROM V$DM_INI WHERE PARA_NAME IN ('ENABLE_HASH_JOIN','PHC_MODE_ENFORCE');生效
ENABLE_HASH_JOIN    1	0	1	1	N	1	1	enable hash join	SESSION	ALL_SYNC	CAN_SYNC
PHC_MODE_ENFORCE	0	0	15	0	N	0	0	enforce the join mode	SESSION	ALL_SYNC	CAN_SYNC
  • 调整以下两个参数 sql查询时间 在3-4秒 , sql 未改动
select /*+ enable_hash_join(0) *//*+ phc_mode_enforce(2) */*
from(SELECT sum(CASE WHEN send.STATUS >= 0 THEN 1 ELSE 0 END) AS TOTAL    ,sum(CASE WHEN send.STATUS  = 1 THEN 1 ELSE 0 END) AS SIGNTOTAL,A_INFOS.BT                                                    ,A_INFOS.CWRQ                                                  ,A_INFOS.ID                                                    ,A_INFOS.MODULE_ID                                             ,A_INFOS.OBJCLASS                                              ,A_INFOS.WH                                                    ,A_INFOS.XFORM_ID                                              ,A_INFOS.MAJORUNIT                                             ,A_INFOS.NGRQ                                                  ,A_INFOS.DOCTYPEFROMA_INFOS A_INFOS --数据量11458330INNER JOIN FW FW		--数据量616757ONA_INFOS.ID = FW.INFO_IDLEFT JOIN c_remotesend send	--数据量10496798 (不带left join  查询用时 1秒, 带left join查询用时 30秒,最终结果集 2400 行数据量)ONA_INFOS.id = send.info_idWHEREA_INFOS.DOCTYPE LIKE '平行收文'AND A_INFOS.module_id = 1912587286812359AND A_INFOS.MAINUNIT  = 140683AND A_INFOS.ROWSTATE >= 0AND(('%%' = '%%')OR A_INFOS.BT LIKE '%%')AND(('%%' = '%%')OR A_INFOS.WH LIKE '%%')AND A_INFOS.CWRQ >= to_date('1900-01-01 00:00:00', 'yyyy-MM-dd HH24:mi:ss')AND A_INFOS.CWRQ <= to_date('2099-12-12 23:59:59', 'yyyy-MM-dd HH24:mi:ss')GROUP BYA_INFOS.BT       ,A_INFOS.CWRQ     ,A_INFOS.ID       ,A_INFOS.MODULE_ID,A_INFOS.OBJCLASS ,A_INFOS.WH       ,A_INFOS.XFORM_ID ,A_INFOS.MAJORUNIT,A_INFOS.NGRQ     ,A_INFOS.DOCTYPEORDER BYA_INFOS.CWRQ DESC)
whererownum <= 10

3.2 hint 的执行计划

在这里插入图片描述

4 永久修改数据库参数

  • 动态会话级 , 同时修改内存值 与 dm.ini 文件 , 新的会话生效 , 不用重启数据库
SP_SET_PARA_VALUE(1,'ENABLE_HASH_JOIN',0);
SP_SET_PARA_VALUE(1,'PHC_MODE_ENFORCE',2);
--(清除执行计划缓存)
CALL SP_CLEAR_PLAN_CACHE();

5 参数说明

参数名默认值类型说明
ENABLE_HASH_JOIN1动态,会话级是否允许使用哈希连接,0:不允许;1:允许。
PHC_MODE_ENFORCE0动态,会话级控制连接的实现方式。0:优化器根据代价情况自由选择连接方式;1:允许使用 NEST LOOP INNER JOIN;2:允许使用索引连接;4:允许使用哈希连接;8:允许使用归并连接支持使用上述有效值的组合值,如 6 表示优化器根据代价情况在索引连接和哈希连接间进行选择。当参数值不为 0 或 15 且包含 2/4/8 其中之一或者它们的组合值时,会将包含的值对应的连接模式参数置 为 1, 没 有包 含 的 值对 应的 连 接 模式 参 数 置为 0(2 对 应 ENABLE_INDEX_JOIN,4 对 应ENABLE_HASH_JOIN,8 对应 ENABLE_MERGE_JOIN)。例如,取值为 6 时没有包含 8,则会将ENABLE_INDEX_JOIN 和 ENABLE_HASH_JOIN 置为 1,将 ENABLE_MERGE_JOIN 置为 0(仅强制设置内存中的值,不改变 dm.ini 文件中的值)

6 达梦数据库学习使用列表

  • 达梦数据库学习使用列表 - - 点击跳转

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何使用Pytest进行自动化测试

为什么需要自动化测试 自动化测试有很多优点&#xff0c;但这里有3个主要的点 可重用性:不需要总是编写新的脚本&#xff0c;除非必要&#xff0c;即使是新的操作系统版本也不需要编写脚本。 可靠性:人容易出错&#xff0c;机器不太可能。当运行不能跳过的重复步骤/测试时&…

不懂就问,换毛季猫咪疯狂掉毛怎么办?宠物浮毛该如何清理?

最近天气变热了&#xff0c;每天都30度以上&#xff0c;我家猫狂掉毛&#xff0c;床上、地板上堆积了不少。第一次养猫的我没见过这种阵仗&#xff0c;以为它生病了&#xff0c;连忙带它去看医生。医生告诉我&#xff0c;这是正常的猫咪换毛现象&#xff0c;我才放下心来。原来…

Unity动画模块 之 3D模型导入基础设置 Rig页签

​本文仅作笔记学习和分享&#xff0c;不用做任何商业用途本文包括但不限于unity官方手册&#xff0c;unity唐老狮等教程知识&#xff0c;如有不足还请斧正​​ 1.Rig页签 Rig 选项卡 - Unity 手册&#xff0c;rig是设置骨骼与替身系统的&#xff0c;工作流程如下 Avatar是什么…

C语言每日好题(3)

有任何不懂的问题可以评论区留言&#xff0c;能力范围内都会一一回答 #define _CRT_SECURE_NO_WARNING #include <stdio.h> #include <string.h> int main(void) {if ((strlen("abc") - strlen("abcdef")) > 0)printf(">\n")…

【数据结构】TreeMap和TreeSet

目录 前言TreeMap实现的接口内部类常用方法 TreeSet实现的接口常用方法 前言 Map和set是一种专门用来进行搜索的容器或者数据结构&#xff0c;其搜索的效率与其具体的实例化子类有关。 一般把搜索的数据称为关键字&#xff08;Key&#xff09;&#xff0c; 和关键字对应的称为…

Docker介绍、docker安装以及实现docker的远程管理

1.Docker介绍 1.Docker介绍 Docker 是⼀个开源的应用容器引擎&#xff0c;可以实现虚拟化&#xff0c;完全采用“沙盒”机制&#xff0c;容器之间不会存在任何接口。 Docker 通过 Linux Container&#xff08;容器&#xff09;技术将任意类型的应用进行包装&#xff0c;变成一…

Vue 自定义文字提示框

目录 前言代码演示相关代码文字提示框组件定义组件调用前言 今天开发遇上了一个新的问题,要求写一个带着滑动动画的文字提示框。但是我经常使用的Element-UI组件库只有淡入淡出效果,并且想要修改样式只能全局修改,非常不利于后期的开发。因此,我最终选择直接自定义一个符合…

EXCEL 分段排序--Excel难题#86

Excel某表格有3列。 ABC1A1B1512A2B27213A3B33824A4B495A5B5736A6B65777A7B7918A13B131509A14B144910A17B1770211A18B1870512A34B343313A35B3540914A36B3657915A37B3710 现在要求对表格按照第3列进行分段排序&#xff0c;由小到大排列。第1段&#xff1a;第3列小于等于50&…

vue3 antdv3 去掉Modal的阴影背景,将圆角边框改为直角的显示,看上去不要那么的立体的样式处理。

1、来个没有处理的效果图&#xff1a; 这个有立体的效果&#xff0c;有阴影的效果。 2、要处理一下样式&#xff0c;让这个阴影的效果去掉&#xff1a; 图片的效果不太明显&#xff0c;但是阴影效果确实没有了。 3、代码&#xff1a; /* 去掉遮罩层阴影 */.ant-modal-mask {…

【R语言】基于多模型的变量重要性图 (Variable Importance Plots)

变量重要性图 Variable Importance Plots 1. 写在前面2.1数据导入2.2 模型训练2.3 变量重要性2.4 变量重要性图2.5 模型模拟验证3.基于caret包计算变量重要性 1. 写在前面 好久没有更新博客了&#xff0c;正好最近在帮老师做一个项目&#xff0c;里面涉及到了不同环境变量的重要…

动态规划篇-代码随想录算法训练营第三十七天| 打家劫舍Ⅰ,打家劫舍Ⅱ,打家劫舍Ⅲ

打家劫舍Ⅰ 题目链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 讲解视频&#xff1a; 动态规划&#xff0c;偷不偷这个房间呢&#xff1f;| LeetCode&#xff1a;198.打家劫舍 题目描述&#xff1a; 你是一个专业的小偷&#xff0c;计划偷窃沿街的房屋。每间…

2024年8月22日嵌入式学习

今日主要学习网络知识 udp recvfrom ssize_t recvfrom(int sockfd, //socket的fd void *buf, //保存数据的一块空间的地址 size_t len, //这块空间的大小 int flags, // 0 默认的接收方式 --- 阻塞方式…

10 Java数据结构:包装类、数组(Array工具类)、ArrayList

文章目录 前言一、包装类1、Integer&#xff08;1&#xff09;基本用法&#xff08;2&#xff09;JDK5前的包装类用法&#xff08;了解即可&#xff0c;能更好帮助我们理解下面的自动装箱和自动拆箱机制&#xff09;&#xff08;3&#xff09;自动装箱与自动拆箱机制 --- 导致&…

基于HarmonyOS的宠物收养系统的设计与实现(一)

基于HarmonyOS的宠物收养系统的设计与实现&#xff08;一&#xff09; 本系统是简易的宠物收养系统&#xff0c;为了更加熟练地掌握HarmonyOS相关技术的使用。 项目创建 创建一个空项目取名为PetApp 首页实现&#xff08;组件导航使用&#xff09; 官方文档&#xff1a;组…

redis实战——go-redis的使用与redis基础数据类型的使用场景(一)

一.go-redis的安装与快速开始 这里操作redis数据库&#xff0c;我们选用go-redis这一第三方库来操作&#xff0c;首先是三方库的下载&#xff0c;我们可以执行下面这个命令&#xff1a; go get github.com/redis/go-redis/v9最后我们尝试一下连接本机的redis数据库&#xff0…

黑神话孙悟空:自媒体小白的流量密码!

当下&#xff0c;黑神话孙悟空的热度如熊熊烈火&#xff0c;席卷了整个游戏世界。 只要与这个话题沾边&#xff0c;似乎就能轻松吸引大量关注。 那么&#xff0c;对于不怎么懂自媒体运营的小伙伴来说&#xff0c;该如何抓住这个机遇呢&#xff1f; 别担心&#xff0c;我们用以…

授权cleanmymac访问全部磁盘 Mac授权访问权限 cleanmymac缺少权限

CleanMyMac是Mac系统下的一款专业的苹果电脑清理软件&#xff0c;同时也是一款优秀的电脑系统管理软件。它能有效清理系统垃圾&#xff0c;快速释放磁盘内存&#xff0c;缓解卡顿现象&#xff0c;保障系统顺畅地运行。 全磁盘访问权限&#xff0c;就好比机场内进行的安全检查。…

微软AI人工智能认证有哪些?

微软提供的人工智能认证主要包括以下几个方面&#xff1a; Azure AI Fundamentals&#xff08;AI900认证&#xff09;&#xff1a;这是一个基础认证&#xff0c;旨在展示与Microsoft Azure软件和服务开发相关的基本AI概念&#xff0c;以创建AI解决方案。它面向具有技术和非技术…

Vue 导航条+滑块效果

目录 前言代码效果展示导航实现代码导航实现代码导航应用代码前言 总结一个最近开发的需求。设计稿里面有一个置顶的导航条,要求在激活的项目下面展示个下划线。我最先开始尝试的是使用 after 的伪类选择器,直接效果一样,但是展示的时候就会闪现变化,感觉不够自然,参考了一…

ES6解构赋值详解;全面掌握:JavaScript解构赋值的终极指南

目录 全面掌握&#xff1a;JavaScript解构赋值的终极指南 一、数组解构赋值 1、基本用法 2、跳过元素 3、剩余元素 4、默认值 二、对象解构赋值 1、基本用法 2、变量重命名 3、默认值 4、嵌套解构 三、复杂的嵌套结构解构 四、函数参数解构赋值 1、对象解构作为函…