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

news2025/2/24 23:35:21

记录一次 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.DOCTYPE
                FROM
                        A_INFOS A_INFOS --数据量11458330
                INNER JOIN FW FW		--数据量616757
                ON
                        A_INFOS.ID = FW.INFO_ID
                LEFT JOIN c_remotesend send	--数据量10496798 (不带left join  查询用时 1秒, 带left join查询用时 30秒,最终结果集 2400 行数据量)
                ON
                        A_INFOS.id = send.info_id
                WHERE
                        A_INFOS.DOCTYPE LIKE '平行收文'
                    AND A_INFOS.module_id = 1912587286812359
                    AND A_INFOS.MAINUNIT  = 140683
                    AND A_INFOS.ROWSTATE >= 0
                    AND
                        (
                                (
                                        '%%' = '%%'
                                )
                             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 BY
                        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.DOCTYPE
                ORDER BY
                        A_INFOS.CWRQ DESC
        )
where
        rownum <= 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.DOCTYPE
                FROM
                        A_INFOS A_INFOS --数据量11458330
                INNER JOIN FW FW		--数据量616757
                ON
                        A_INFOS.ID = FW.INFO_ID
                LEFT JOIN c_remotesend send	--数据量10496798 (不带left join  查询用时 1秒, 带left join查询用时 30秒,最终结果集 2400 行数据量)
                ON
                        A_INFOS.id = send.info_id
                WHERE
                        A_INFOS.DOCTYPE LIKE '平行收文'
                    AND A_INFOS.module_id = 1912587286812359
                    AND A_INFOS.MAINUNIT  = 140683
                    AND A_INFOS.ROWSTATE >= 0
                    AND
                        (
                                (
                                        '%%' = '%%'
                                )
                             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 BY
                        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.DOCTYPE
                ORDER BY
                        A_INFOS.CWRQ DESC
        )
where
        rownum <= 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.coloradmin.cn/o/2064885.html

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

相关文章

嵌入式学习----网络通信之TCP协议通信

TCP&#xff08;即传输控制协议&#xff09;&#xff1a;是一种面向连接的传输层协议&#xff0c;它能提供高可靠性通信(即数 据无误、数据无丢失、数据无失序、数据无重复到达的通信) 适用情况&#xff1a; 1. 适合于对传输质量要求较高&#xff0c;以及传输大量数据 的通信。…

系统编程-信号

6 信号与管道 1 目录 6 信号与管道 1 信号 信号的概念 信号的使用 信号的发送 通过函数来实现信号的发送 信号改造函数(重点) 给自己发送信号函数 定时闹钟函数 暂停进程的函数 例题&#xff1a; 代码一&#xff1a; 代码二&#xff1a; 代码分析 -- linux系统下…

ArcGIS热点分析 (Getis-Ord Gi*)——基于地级市尺度的七普人口普查数据的热点与冷点分析

先了解什么是热点分析 ? 热点分析 (Getis-Ord Gi*) 是一种用于空间数据分析的技术&#xff0c;主要用于识别地理空间数据中值的聚集模式&#xff0c;可以帮助我们理解哪些区域存在高值或低值的聚集&#xff0c;这些聚集通常被称为“热点”或“冷点”&#xff0c;Gi* 统计量为…

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

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

PhotoZoom Pro 9:AI加持让图像放大革命性飞跃 PhotoZoom下载

全球领先的数字图片和图形缩放软件——PhotoZoom Pro 9&#xff0c;现已正式发布&#xff01;凭借全新的S-Spline Max AI图像缩放技术&#xff0c;PhotoZoom Pro 9在图像放大质量上达到了前所未有的高度。欢迎各位下载和体验最新的9系列版本。 PhotoZoom Pro 9发布 PhotoZoom9…

远端登录基础配置实验

1.作用 方便远程管理&#xff0c;并且传统的console线只能一个用户访问&#xff0c;而远程管理的协议&#xff0c;可以多用户同时登录。 2.基础远程管理方式 Telnet 协议 telnet协议提供了一种通过终端远程登录到服务器的方式&#xff0c;可以远程对设备进行配置和管…

Prometheus 1:安装(Centos7)

1. 同步时间 因Prometheus对时间精度要求高&#xff0c;所以安装前&#xff0c;需要与NTP同步时间&#xff1a; #设置系统显示时区为 亚洲上海 timedatectl set-timezone Asia/Shanghai#同步当地时间 ntpdate -u cn.pool.ntp.org 2. 同步时间后&#xff0c;从官网下载Prometh…

《Web项目跨域请求后端Api设置Cookie失败问题?》

问题描述&#xff1a; 在web项目中跨域请求api时&#xff0c;api登录成功后需要向域名中设置cookie实现在两个域名下共享&#xff0c;但是登录接口返回成功&#xff0c;响应头中也有set-cookie&#xff0c;实际却无法设置到cookie中… web项目访问时的域名https://b.com/ api所…

解决在IIS下typecho访问网址为localhost的问题

如何在IIS下为typecho开启伪静态 布署好typecho发现访问的地址是这样的 默认的访问地址可以看出是一个php的动态页面&#xff0c;通过配置&#xff0c;可以让地址看起来像是一个静态页面。 开启伪静态需要以下两个步骤&#xff1a; 1、增加IIS Rewrite模块重写规则 2、到typ…

牛客网NC1大数加法

因为要计算的是两个很大很大的数&#xff0c;假设计算出来的数据大于整型的最大值&#xff0c;此时就会出现问题。所以要换个方法来解决问题。 我们应该以字符串的形式来读取两个正整数&#xff0c;并且返回二者相加的结果 我们应该从大数的个位开始&#xff0c;逐级的向上相…

海康VisionMaster使用学习笔记13-串口通信

测试工具 协议介绍 串口在VM中的使用 1. RS232信号线定义 2. RS485信号线定义 3. 创建串口连接 4. 测试VM中串口接收数据

Java Programming Examples

Java Programming Examples Example - Environment How to compile a java file? How to debug a java file? How to set classpath? java -cp java -classpathHow to view current classpath? windows C:> echo %CLASSPATH%linux echo $CLASSPATHHow to set dest…

cbsd 设置网络问题留档

cbsd创建或导入虚拟机&#xff0c;网络不通。使用bridge一直不通&#xff0c;后来是通过设立VALENAT才调通的。 cbsd里网卡设置&#xff0c;里面可以设置网络的上一级 默认是auto 这里选bridge1 试试 失败 选tap1 试试 网络还是不通&#xff0c;但是好消息&#xff0c;是能…

element 使用printJS调用打印功能

1.安装依赖 npm install print-js --save 2.在main.js中全局引用 import printJS from print-js; 3.在页面中使用 <el-button type"success" plain icon"Printer" :disabled"single" click"handlePrint">打印</el-button…

VBA技术资料MF188:将Txt文件转换成Html文件

我给VBA的定义&#xff1a;VBA是个人小型自动化处理的有效工具。利用好了&#xff0c;可以大大提高自己的工作效率&#xff0c;而且可以提高数据的准确度。“VBA语言専攻”提供的教程一共九套&#xff0c;分为初级、中级、高级三大部分&#xff0c;教程是对VBA的系统讲解&#…

03:电容的充放电特性及应用举例

1.电容的基本特性&#xff1a;电容两端的电压不能突变 2.影响电容两端电压的参数&#xff1a;整个回路中电阻&#xff0c;电容大小 3.如何计算电容的电压变化时间&#xff1f; τRC R1k C1uF 则得到τ1ms的时间 应用&#xff1a;芯片使能延时

测试一组图像生成#Mixlab的异形头

“异形头”或“物体头” 通常指的是一种艺术或设计中的概念&#xff0c;人物的头部被替换为非人体的物体或异形结构。这种设计常见于超现实主义艺术、漫画、动画和游戏中&#xff0c;旨在创造视觉冲击或传达特定的主题和情感。 shadow&#xff1a; 这个概念还蛮有意思的&#x…

作为科协T1级,为何作者纷纷吐血拔草IEEE顶刊TEC,转投TIE和TTE,它输在哪了?

IEEE顶级期刊 本期解析一本能源与发电技术领域SCI&EI&#xff0c;期刊入选中国科协T1级目录&#xff0c;但网友的发表经历却一波三折&#xff0c;大批慕名而来的作者纷纷因其审稿速度很慢而“拔草”&#xff0c;甚至建议转投其它trans类型&#xff0c;这是怎么回事呢 1、期…

2-73 基于matlab的weber能量法求解齿轮时变啮合刚度的程序

基于matlab的weber能量法求解齿轮时变啮合刚度的程序&#xff0c;能够跑出刚度图&#xff0c;通过求解轮齿部分变形、基体变形及局部接触变形这三部分的变形&#xff0c;进而求得综合弹性变形&#xff0c;最终求出时变啮合刚度。程序已调通&#xff0c;可直接运行。 2- 73 齿轮…

乡村养老服务管理系统

TOC springboot549乡村养老服务管理系统pf 绪论 1.1 研究背景 现在大家正处于互联网加的时代&#xff0c;这个时代它就是一个信息内容无比丰富&#xff0c;信息处理与管理变得越加高效的网络化的时代&#xff0c;这个时代让大家的生活不仅变得更加地便利化&#xff0c;也让…