达梦数据库系列—44.SQL调优

news2024/11/14 13:40:35

目录

SQL优化思路

1、定位慢sql

2、SQL分析方法

2.1 执行计划

2.2 ET 工具

2.3 dbms_sqltune 工具

3、SQL语句优化

3.1 索引

3.2 SQL语句改写

3.3 表设计优化

3.4 表的连接方式

3.5 HINT

4、统计信息


SQL优化思路

1、定位慢sql

待优化的SQL大致可分为两类:

1、SQL 执行时间在十几秒到数十秒之间,但执行频率不高,此类 SQL 对数据库整体性能影响并不大,可以放到最后进行优化。

2、SQL 单独执行时间可能很快,在几百毫秒到几秒之间,但执行频率非常高,甚至达到每秒上百次,高并发下执行效率降低,很可能导致系统瘫痪,此类 SQL 是优化的首要对象。

定位慢sql的两种方法:

  1. 开启跟踪日志,见“日志总结-SQL日志”
  2. 通过系统视图查看,见“常用SQL-sql相关”

2、SQL分析方法

2.1 执行计划

见达梦数据库系列-40.执行计划

2.2 ET 工具

ET 功能默认关闭,可通过配置 INI 参数中的 ENABLE_MONITOR=1、MONITOR_SQL_EXEC=1 开启该功能。

--两个参数均为动态参数,可直接调用系统函数进行修改

SP_SET_PARA_VALUE(1,'ENABLE_MONITOR',1);

SP_SET_PARA_VALUE(1,'MONITOR_SQL_EXEC',1);

--会话级别修改只在当前会话生效

SF_SET_SESSION_PARA_VALUE('MONITOR_SQL_EXEC',1);

--关闭 ET

SP_SET_PARA_VALUE(1,'ENABLE_MONITOR',0);

SP_SET_PARA_VALUE(1,'MONITOR_SQL_EXEC',0);

执行 SQL 语句后,客户端会返回 SQL 语句的执行号。单击执行号即可查看 SQL 语句对应的 ET 结果。

如果没有图形界面,调用存储过程可返回相同结果。

  • OP: 操作符
  • TIME(us): 时间开销,单位为微秒
  • PERCENT: 执行时间占总时间百分比
  • RANK: 执行时间耗时排序
  • SEQ: 执行计划节点号
  • N_ENTER: 进入次数

2.3 dbms_sqltune 工具

使用前提:建议会话级开启参数 MONITOR_SQL_EXEC=1

ALTER SESSION SET 'MONITOR_SQL_EXEC' = 1;

<执行待优化SQL>

select DBMS_SQLTUNE.REPORT_SQL_MONITOR(SQL_EXEC_ID=>1213701) from dual;

3、SQL语句优化

3.1 索引

索引存储结构

从B*树中访问每个叶子节点的成本都是h次IO,索引的访问效率只跟B*树的高度有关系。

以下场景可考虑创建索引:

  • 仅当要通过索引访问表中很少的一部分行(1%~20%)。
  • 索引可覆盖查询所需的所有列,不需额外去访问表。

组合索引的顺序:

  •  最优先把等值匹配的列放最前面,范围匹配的放后面
  •  其次把过滤性好的列放前面,过滤性差的放后面
  •  查询时组合索引只能利用一个非等值字段

存在下列情况将导致无法使用索引:

  • 条件列不是索引的首列
  • 条件列上有函数或计算
  • 存在隐式类型转换
  • 如果走索引会更慢

建立索引的原则:

  • 建立唯一索引。唯一索引能够更快速地帮助我们进行数据定位;
  • 为经常需要进行查询操作的字段建立索引;
  • 对经常需要进行排序、分组以及联合操作的字段建立索引;
  • 在建立索引的时候,要考虑索引的最左匹配原则(在使用 SQL 语句时,如果 where 部分的条件不符合最左匹配原则,可能导致索引失效,或者不能完全发挥建立的索引的功效);
  • 不要建立过多的索引。因为索引本身会占用存储空间;
  • 如果建立的单个索引查询数据很多,查询得到的数据的区分度不大,则考虑建立合适的联合索引;
  • 尽量考虑字段值长度较短的字段建立索引,如果字段值太长,会降低索引的效率。

3.2 SQL语句改写

优化 GROUP BY

在 GROUP BY 之前过滤掉不需要的内容

--优化前

SELECT JOB,AVG(AGE) FROM TEMP GROUP BY JOB HAVING JOB = 'STUDENT' OR JOB = 'MANAGER';

--优化后

SELECT JOB,AVG(AGE) FROM TEMP WHERE JOB = 'STUDENT' OR JOB = 'MANAGER' GROUP BY JOB;

用 EXISTS 替换 DISTINCT

--优化前

SELECT DISTINCT USER_ID,BILL_ID FROM USER_TAB1 D,USER_TAB2 E WHERE D.USER_ID= E.USER_ID;

--优化后

SELECT USER_ID,BILL_ID FROM USER_TAB1 D WHERE EXISTS(SELECT 1 FROM USER_TAB2 E WHERE E.USER_ID= D.USER_ID);

用 WHERE 子句替换 HAVING 子句

用 UNION ALL 替换 UNION

用 TRUNCATE 替换 DELETE

用 EXISTS 替换 IN、用 NOT EXISTS 替换 NOT IN

3.3 表设计优化

水平分区表

见“分区表”

全局临时表

事务型临时表

创建指定临时表是事务级的,每次事务提交或回滚之后,表中所有数据都被删除

CREATE TEMPORARY TABLE TEMP_COMM (C1 INT,C2 INT,C3 DATETIME) ON COMMIT DELETE ROWS;

会话型临时表

创建指定临时表是会话级的,会话结束时才清空表;

CREATE TEMPORARY TABLE TEMP_SESS (C1 INT,C2 INT,C3 DATETIME) ON COMMIT PRESERVE ROWS;

3.4 表的连接方式

见达梦数据库系列-41.表连接方式

3.5 HINT

见达梦数据库系列-43.HINT

4、统计信息

见达梦数据库系列-39.统计信息详解

达梦技术社区:达梦数据库 - 新一代大型通用关系型数据库 | 达梦在线服务平台

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

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

相关文章

PCIe学习笔记(15)

设备就绪状态 (Device Readiness Status&#xff0c;DRS)消息 &#xff08;Device Readiness Status (DRS) 是PCIe规范中引入的一种机制&#xff0c;旨在改进设备初始化和就绪状态的检测与报告。 在以往的PCIe版本中&#xff0c;系统通常依赖于固定的超时机制来判断设备是否已…

天机学堂 第四天 高并发优化总结

前端每隔15秒就发起一次请求&#xff0c;将播放记录写入数据库。 但问题是&#xff0c;提交播放记录的业务太复杂了&#xff0c;其中涉及到大量的数据库操作&#xff1a; 如何进行优化 单机并发能力 变同步为异步 合并写请求 提高单机并发&#xff1a;优化SQL&#xff0c;尽…

vscode中WSL插件的安装配置

1.安装WSL插件 2.点击左下角的蓝色区域&#xff0c;Connect to WSL连接下载Linux系统&#xff0c;我这里下载Ubuntu ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/7ec21d81b4ec49f3856be2d8013bc12f.png 3.输入用户名和密码 4.成功连接 5.配置过程中出现的问题 …

LinuxUNIX系统编程手册——(十四)系统编程概念

14.1 设备专用文件&#xff08;设备文件&#xff09; 设备专用文件与系统的某个设备相对应。在内核中&#xff0c;每种设备类型都有与之相对应的设备驱动程序&#xff0c;用来处理设备的所有 I/O 请求。设备驱动程序属内核代码单元&#xff0c;可执行一系列操作&#xff0c;&a…

服务器SSL证书年费一般多少钱?

SSL证书作为网络安全的重要组成部分&#xff0c;不仅能够保护数据传输的安全性&#xff0c;还能增强用户对网站的信任度。然而&#xff0c;面对市场上众多的SSL证书选项&#xff0c;许多人可能会感到困惑&#xff1a;究竟应该选择哪种类型的SSL证书&#xff1f;它们的价格又是怎…

【从零开始一步步学习VSOA开发】搭建VSOA运行环境

搭建VSOA运行环境 为方便 VSOA 的运行和调测&#xff0c;这里选择RealEvo-Simulator 下的 AMD64 平台作为 VSOA 的硬件运行环境&#xff0c;操作系统则选择标准版的 SylixOS 而不是容器版的SylixOS。 下载虚拟机资源 RealEvo-Simulator 并不自带 AMD64 平台虚拟机&#xff0…

开发板与ubuntu不能ping通怎么办?

TOC 第一步&#xff1a;VMware 设置 打开 VMware Workstation Pro 里的 虚拟机 -> 设置 设置网络适配器为桥接模式。这里不要勾选“复制物理网络连接状态”。 因为电脑是 WiFi 上网&#xff0c;所以需要添加一个网络适配器并设置成 NAT 模式&#xff0c;供虚拟机上网。具…

19066 第K小子串

这个问题可以通过使用集合&#xff08;set&#xff09;和优先队列&#xff08;priority_queue&#xff09;来解决。我们首先遍历字符串的所有子串&#xff0c;然后将这些子串放入一个集合中&#xff0c;这样可以去除重复的子串。然后我们将集合中的子串放入一个优先队列中&…

jvm方法调用指令invokestatic,invokespecial,invokeinterface,invokevirutal分析

写在前面 本文来看下jvm方法调用相关的4个指令invokestatic,invokespecial,invokeinterface,invokevirutal。 1&#xff1a;如何来记 1.1&#xff1a;静态绑定和动态绑定 如果是在编译期就能确定要调用的方法&#xff0c;就叫做静态绑定&#xff0c;比如构造函数方法&#…

Redis RDB AOF持久化 主从集群同步原理

RDB RDB Redis数据备份文件 也被叫做Redis数据快照 简单来说就是 把内存中的所有数据记录到磁盘中 当Redis实例故障实例重启后从磁盘读取快照文件恢复数据 快照文件称为RDB文件 默认时保存在当前运行目录执行时机 执行save命令 127.0.0.1:6379> save OK 127.0.0.1:6379&g…

(002)两数相加

思路分析&#xff1a; 类似于一个大数加法&#xff0c;注意链表的边界和进位&#xff0c;同时还有注意存在两个链表长度不等&#xff0c;需要处理多出来的元素 代码实现&#xff1a; /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNod…

PDF发票解析并将信息回填到前端(1)后端解析PDF

文章目录 参考文章技术栈需求解析发票类型 1. 最终项目结构1.1 说明 2. 相关代码2.1 导入相应的maven依赖2.2 实体类2.3 工具类2.4 三层架构controllerservicemapper 参考文章 参考文章 技术栈 SpringBootVue 需求 本文主要是实现提取发票中的部分内容&#xff0c;并实现自…

单调栈② | Java | LeetCode 接雨水 最大的矩形

42. 接雨水 暴力法 for循环遍历每一个柱子&#xff0c;内层for循环找到左边和右边比它高的柱子 时间复杂度 n^2 优化&#xff1a;添加一个预处理 定义一个数组&#xff0c;存放该柱子右边比他高的柱子是哪一个 再用一个数组&#xff0c;存放该柱子左边比他高的柱子是哪一个 …

html页面下载及多html文件合成单pdf方法

1&#xff0c;html页面下载 &#xff5e;1&#xff0c;首先在edge中微软扩展商店搜索 “SingleFile”添加扩展 浏览器右上角点击扩展按钮 下拉菜单选择管理扩展 点击 获取 Microsoft Edge 扩展 进入微软商店搜索 “singlefile” 点击获取 点击浏览器右上角扩展按钮&#xff0c;…

IPv4 vs IPv6:了解这两大协议的关键差异

我发现&#xff0c;很多找代理IP的朋友在后台问我的问题都很相似&#xff01;都被配置IP的最后一步&#xff1a;选择IPv4还是IPv6&#xff1f;给难住了。昨晚我一晚没睡&#xff0c;终于整理出对IPv4和IPv6的对比总结&#xff0c;从概念阐述到特点对比&#xff0c;再解答IPv6总…

利用 IP 地址进行社交工程攻击?

社交工程攻击是网络安全的主要威胁之一。现在攻击者不再仅依赖技术漏洞&#xff0c;而是想利用人性的弱点来获取有价值的信息或实现非法目的。 IP 地址在社交工程攻击中的作用 定位和伪装获取目标用户的 IP 地址&#xff0c;大致确定目标用户地理位置&#xff0c;然后伪装成当…

spring原理(自学第六天)

Aware 接口及 InitializingBean 接口 今天将会学到Aware 接口及 InitializingBean 接口 我们可以先了解他们的作用&#xff1a; 1. Aware 接口用于注入一些与容器相关信息, 例如 a. BeanNameAware 注入 bean 的名字 b. BeanFactoryAware 注入…

解锁LLM应用潜能:提示工程的39种方法与应用全解析!

大型语言模型&#xff08;LLMs&#xff09;在许多不同的自然语言处理&#xff08;NLP&#xff09;任务上表现出了显著的性能。提示工程在提升LLMs已有能力方面发挥着关键作用&#xff0c;使其在各种NLP任务上取得了显著的性能提升。提示工程需要编写自然语言指令&#xff0c;即…

QT 应用程序输出中文乱码

一 &#xff0c;选择文本编码 1. 点击编辑再点击Select Encoding选择编码 2 .在弹出的窗口&#xff0c;选择UTF-8再点击按编码保存即可 3. 重新编译&#xff0c;可以发现中文乱码问题解决

Spring源码解析(28)之AOP的核心对象创建过程总结

一、总结图 二、总结 以上是对AOP核心对象创建的一个总结&#xff0c;接下来我们分点介绍我们自从定义了aop.xml之后&#xff0c;spring在启动的时候是怎么创建了这些核心对象的。 启动spring容器之后&#xff0c;其实核心是是refresh方法&#xff0c;refresh的13个核心方法&…