sql调优:优化响应时间(优化sql) ; 优化吞吐量
Sql性能调优的目的
1.优化响应时间>>优化sql
经过调优后,执行查询、更新等操作的时候,数据库的反应速度更快,花费的时间更少。
2.优化吞吐量
即“并发”, 就是“同时处理请求”的能力。
优化sql
尽量将多条SQL语句压缩到一句>>减少访问数据库的次数
SQL中每次执行SQL的时候都要建立网络连接、进行权限校验、进行SQL语句的查询优化、发送执行结果,这个过程是非常耗时的,因此应该尽量避免过多的执行SQL语句,能够压缩到一句SQL执行的语句就不要用多条来执行。
使用表的别名
>>当在SQL语句中连接多个表时, 尽量使用表的别名并把别名前缀于每个列上。这样一来,就可以减少解析的时间并减少那些由列歧义引起的语法错误。
合理使用游标
>>游标的效率较差,如果游标操作的数据超过1万行,那么就应该考虑改写
>>使用WHILE循环代替游标,性能通常更好
>>MERGE语句可以同时处理插入、更新和删除操作,适合替代游标中的复杂逻辑
选择记录条数最少的表作为基础表(在FROM 子句中包含多个表的情况下)
用TRUNCATE语句替代DELETE语句(清空表数据时)
>>当执行TRUNCATE命令时, 回滚段不会存放任何可被恢复的信息,所有数据不能被恢复。因此很少资源被调用,整个执行时间就会很短。
通过用索引提高效率, 且避免导致索引失效的情况
>>避免SQL中出现隐式类型转换
(索引字段在作为where条件)因为隐式类型转换也属于计算,所以此时DBMS会使用全表扫面。
>>避免在索引列上使用空值判断,即 IS NULL和IS NOT NULL。
可能造成优化器假设匹配的记录数太多,检索范围过宽,DBMS优化器将放弃索引查找而使用全表扫描。
>>避免在索引列上使用NOT。
>>避免在索引列上使用函数
>>避免在索引上进行数学计算(+-*/)
>>用UNION替换OR(适用于索引列):
>>联合索引遵循最左原则:
如果索引是建立在多个列上,只有在它的第一个列(leading column)被where子句引用时,优化器才会选择使用该索引。
>>避免改变索引列的类型:
当比较不同数据类型的数据时, ORACLE自动对列进行简单的类型转换
假设 EMPNO是一个数值类型的索引列. SELECT … FROM EMP WHERE EMPNO = ‘123' 实际上,经过ORACLE类型转换, 语句转化为: SELECT … FROM EMP WHERE EMPNO = TO_NUMBER(‘123') 幸运的是,类型转换没有发生在索引列上,索引的用途没有被改变.
假设EMP_TYPE是一个字符类型的索引列. SELECT … FROM EMP WHERE EMP_TYPE = 123 这个语句被ORACLE转换为: SELECT … FROM EMP WHERE TO_NUMBER(EMP_TYPE)=123 因为内部发生的类型转换, 这个索引将不会被用到!
Union
>>用UNION ALL替换UNION,(union all不去重,性能更好)
>>用UNION替换WHERE子句中的OR, 可以避免索引的失效
当WHERE子句中使用OR连接多个条件时,数据库优化器可能无法有效利用索引,从而导致全表扫描
通过将OR条件重写为UNION,可以将查询拆分为多个子查询,每个子查询独立利用索引EXISTS
EXISTS
>>当SQL包含一对多表查询时,用EXISTS替换DISTINCT
DISTINCT关键字用于去除查询结果中的重复行。它的实现方式通常是: 先执行查询,生成一个中间结果集。 然后对中间结果集进行排序或哈希操作,以去除重复行
短路评估:EXISTS子句在找到第一个匹配的记录后会立即停止搜索,不会继续处理剩余的记录。
布尔逻辑:EXISTS返回布尔值(TRUE或FALSE),而不是具体的行数据,因此它避免了不必要的数据处理和去重操作

>>用EXISTS替代IN、用NOT EXISTS替代 NOT IN:
EXISTS和NOT EXISTS通过短路评估(找到第一个匹配项后停止搜索)提高了查询效率
用 >= 替换 >
WHERE age > 25如果数据中存在大量等于25的记录,>=可能会更快地定位到起始点
在select中,避免*的使用
oracle在解析的过程中,会将“* ”依次转换成列名, 这是通过查询数据字典完成的, 这将耗费更长的时间。
简单等值比较使用DECODE函数, 复杂判断条件case when
DECODE语法简洁, 可以减少SQL解析的复杂度
短路评估:DECODE函数在找到匹配条件后会立即返回结果,而不会继续评估后续条件
在使用oracle时,尽量多使用COMMIT命令。 该命令可以明显释放运行资源,因此程序的性能得到明显提高。(太基础,本来就应该这么做,不建议说)
SQL语句尽量用大写的
因为oracle总是先解析SQL语句,把小写的字母转换成大写的再执行。
尽量将HAVING中的条件放到where中.
减少数据处理量:将条件从HAVING移到WHERE可以尽早地过滤掉不满足条件的记录,从而减少后续数据处理的量。
避免不必要的聚合计算:如果条件可以放在WHERE子句中,可以避免对不满足条件的记录进行聚合计算,提高查询效率。
利用索引:WHERE子句中的条件可以利用索引进行快速过滤,而HAVING子句中的条件通常无法利用索引
使用参数化SQL,预编译查询
程序中通常是根据用户的输入来动态执行SQL,这时应该尽量使用参数化SQL,这样不仅可以避免SQL注入漏洞攻击,最重要数据库会对这些参数化SQL进行预编译,这样第一次执行的时候DBMS会为这个SQL语句进行查询优化并且执行预编译,这样以后再执行这个SQL的时候就直接使用预编译的结果,这样可以大大提高执行的速度。
提高"抗并发"能力的方法
降低事务隔离级别(一定程度地牺牲数据一致性等)>>数据分析系统(读多写少)
通过“集群”等方式,实现请求的“负载均衡”>>Hadoop
为什么降低隔离级别可以提高抗并发能力?
减少锁竞争:高隔离级别(如SERIALIZABLE)通常需要更严格的锁机制来保证数据一致性,这会导致事务之间频繁的锁竞争,降低并发性能。
减少锁等待时间:降低隔离级别可以减少锁的使用范围和持有时间,从而减少事务之间的等待时间,提高系统的吞吐量。
牺牲一致性换取性能:在某些业务场景中,数据一致性要求并不严格,可以通过适当降低隔离级别来换取更高的并发性能。

为什么集群可以提高抗并发能力?
负载均衡:通过将请求分散到多个数据库节点上,避免单个节点过载,从而提高系统的整体处理能力。
高可用性:集群中的节点可以相互备份,当某个节点出现故障时,其他节点可以接管其请求,保证系统的可用性。
扩展性:可以通过增加节点来水平扩展系统的处理能力,适应不断增长的业务需求。
适用场景:对并发性能和可用性要求较高的场景,例如
高流量的在线交易系统:如电商平台、金融系统等,需要处理大量并发请求。
分布式大数据系统:如Hadoop、Cassandra等,通过分布式架构处理海量数据。
数据库集群是指通过多台数据库服务器(DB Server)协同工作,共同承担业务请求的系统。
相关文章:
sql调优:优化响应时间(优化sql) ; 优化吞吐量
Sql性能调优的目的 1.优化响应时间>>优化sql 经过调优后,执行查询、更新等操作的时候,数据库的反应速度更快,花费的时间更少。 2.优化吞吐量 即“并发”, 就是“同时处理请求”的能力。 优化sql 尽量将多条SQL语句压缩到一句>…...
【Mybatis】如何简单使用mybatis-plus,以及MybatisGenerator自动生成或者实现SQL语句
前言 🌟🌟本期讲解关于mybatis中SQL自动生成的相关知识介绍~~~ 🌈感兴趣的小伙伴看一看小编主页:GGBondlctrl-CSDN博客 🔥 你的点赞就是小编不断更新的最大动力 🎆…...
Halcon 车牌识别-超精细教程
车牌示例 流程: 读取图片转灰度图阈值分割,找车牌内容将车牌位置设置变换区域形状找到中心点和弧度利用仿射变换,斜切车牌旋转转正,把车牌抠出来利用形态学操作拼接车牌号数字训练ocr开始识别中文车牌 本文章用到的算子(解析) Halcon 算子-承接车牌识别-CSDN博客 rgb1_to_gray…...
LeetCode 25 - K 个一组翻转链表
LeetCode 25 - K 个一组翻转链表 这道题是一个典型的链表操作题,考察我们对链表的精确操作,包括反转链表、分组处理、递归和迭代的结合应用等。还可以通过变体问题延伸到优先队列操作、归并、分块等,这使得它成为面试中的高频考题之一。 题目…...
一文读懂智能硬件定位:开启智能时代的精准导航
一、智能硬件定位是什么 (一)基本概念阐述 智能硬件定位,本质上是智能硬件依托一系列特定技术手段,精准测定自身所处地理位置的过程。这一实现过程离不开诸多关键技术的支撑。传感器堪称其中的 “排头兵”,像加速度计…...
夸父工具箱(安卓版) 手机超强工具箱
如今,人们的互联网活动日益频繁,导致手机内存即便频繁清理,也会莫名其妙地迅速填满,许多无用的垃圾信息悄然占据空间。那么,如何有效应对这一难题呢?答案就是今天新推出的这款工具软件,它能从根…...
Html5学习教程,从入门到精通,HTML5 列表语法知识点及案例代码(11)
HTML 列表语法知识点及案例代码 一、HTML 列表类型 HTML 提供了三种列表类型: 无序列表 (Unordered List):使用 <ul> 标签定义,列表项使用 <li> 标签定义。默认情况下,列表项前面会显示黑色圆点。有序列表 (Ordere…...
内核进程调度队列(linux的真实调度算法) ─── linux第13课
目录 内核进程调度队列的过程 一个CPU拥有一个runqueue(运行队列在内存) 活动队列(active) 过期队列(expired) active指针和expired指针 重绘runqueue linux内核O(1)调度算法 总结 补充知识: 封装链式结构的目的是: 仅使用封装链式结构可以得到全部的task_struct的信…...
16.7 LangChain LCEL 极简入门:Prompt + LLM 的黄金组合
LangChain LCEL 极简入门:Prompt + LLM 的黄金组合 关键词:LCEL 基础示例、Prompt 模板设计、LLM 集成、链式调用、LangChain 快速上手 1. 基础架构解析:Prompt → LLM → Output 1.1 核心组件交互流程 #mermaid-svg-pv3fH3mEKyE4TNaF {font-family:"trebuchet ms&qu…...
Spring线程池学习笔记
Spring提供了多种方式来配置和使用线程池,最常见的是通过TaskExecutor和ThreadPoolTaskExecutor。 Spring线程池 TaskExecutor 接口 TaskExecutor 是Spring框架中的一个接口,它是对Java的Executor接口的简单封装。它的主要目的是为了提供一个统一的接口…...
ArcGIS操作:08 计算shp面积并添加到属性表
1、打开属性表 注意:计算面积前,需要把shp的坐标系转化为投影坐标系(地理坐标系用于定位、投影坐标系用于测量) 2、创建字段 3、编辑字段名、类型 4、选择字段,计算几何 5、选择属性、坐标系、单位...
安卓音频框架混音器
在 Android 音频框架中,混音器(Mixer) 是 AudioFlinger 服务的核心组件之一,负责将多个音频流(来自不同应用或系统组件)混合为统一的输出流,再传输到音频硬件设备(如扬声器、耳机等&…...
左值引用与指针的区别
很多朋友遇到过这个问题:左值引用与指针有哪些区别?脑子里闪过很多答案,但大部分都是各自的定义,真要说他们两个有什么区别,有的时候还这是说不上来。本文针对这个问题进行归纳总结,希望对大家有所帮助。 …...
Linux基础使用和程序部署
目录 1.Linux 1.2 Linux的环境搭配 1.2.1 使用云服务器 1.2.2使用终端软件连接到Linux 1.3. Linux 常用命令 1. ls:列出当前目录中的文件和子目 2.pwd:显示当前工作目录的路径 3.cd:改变工作目录,将当前的工作目录改变到指定目…...
Linux驱动开发之串口驱动移植
原理图 从上图可以看到RS232的串口接的是UART3,接下来我们需要使能UART3的收发功能。一般串口的驱动程序在内核中都有包含,我们配置使能适配即可。 设备树 复用功能配置 查看6ull如何进行uart3的串口复用配置: 设备树下添加uart3的串口复用…...
计算机毕业设计SpringBoot+Vue.js美食推荐系统商城(源码+文档+PPT+讲解)
温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…...
指针小节.
....指针的第四个作用:函数的结果和计算状态分开 高级指针。。 指针中的数据类型:获取字节数据的个数。步长:指针移动一次的字节个数(int,long。。。各自字节都不同) 加减都可以...
[Qt5] QJson数据之间的转换以及QByteArray图像数据压缩
📢博客主页:https://loewen.blog.csdn.net📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!📢本文由 丶布布原创,首发于 CSDN,转载注明出处🙉📢现…...
2025年能源工作指导意见
2025年是“十四五”规划收官之年,做好全年能源工作意义重大。为深入贯彻落实党中央、国务院决策部署,以能源高质量发展和高水平安全助力我国经济持续回升向好,满足人民群众日益增长的美好生活用能需求,制定本意见。 一、总体要求…...
Android 获取jks的SHA1值:java.io.IOException: Invalid keystore format
命令生成 keytool -list -v -keystore 全路径.jks -alias 别名 -storepass 密码 -keypass 密码 1、遇到 的问题: 通过快捷键 ‘win r’ 启动的小黑框运行上面的命令会出现下面这个错误keytool 错误: java.io.IOException: Invalid keystore format 2、解决问题 …...
3.3.1_1 检错编码(奇偶校验码)
从这节课开始,我们会探讨数据链路层的差错控制功能,差错控制功能的主要目标是要发现并且解决一个帧内部的位错误,我们需要使用特殊的编码技术去发现帧内部的位错误,当我们发现位错误之后,通常来说有两种解决方案。第一…...
visual studio 2022更改主题为深色
visual studio 2022更改主题为深色 点击visual studio 上方的 工具-> 选项 在选项窗口中,选择 环境 -> 常规 ,将其中的颜色主题改成深色 点击确定,更改完成...
【解密LSTM、GRU如何解决传统RNN梯度消失问题】
解密LSTM与GRU:如何让RNN变得更聪明? 在深度学习的世界里,循环神经网络(RNN)以其卓越的序列数据处理能力广泛应用于自然语言处理、时间序列预测等领域。然而,传统RNN存在的一个严重问题——梯度消失&#…...
1688商品列表API与其他数据源的对接思路
将1688商品列表API与其他数据源对接时,需结合业务场景设计数据流转链路,重点关注数据格式兼容性、接口调用频率控制及数据一致性维护。以下是具体对接思路及关键技术点: 一、核心对接场景与目标 商品数据同步 场景:将1688商品信息…...
基于Docker Compose部署Java微服务项目
一. 创建根项目 根项目(父项目)主要用于依赖管理 一些需要注意的点: 打包方式需要为 pom<modules>里需要注册子模块不要引入maven的打包插件,否则打包时会出问题 <?xml version"1.0" encoding"UTF-8…...
2025季度云服务器排行榜
在全球云服务器市场,各厂商的排名和地位并非一成不变,而是由其独特的优势、战略布局和市场适应性共同决定的。以下是根据2025年市场趋势,对主要云服务器厂商在排行榜中占据重要位置的原因和优势进行深度分析: 一、全球“三巨头”…...
【Go语言基础【13】】函数、闭包、方法
文章目录 零、概述一、函数基础1、函数基础概念2、参数传递机制3、返回值特性3.1. 多返回值3.2. 命名返回值3.3. 错误处理 二、函数类型与高阶函数1. 函数类型定义2. 高阶函数(函数作为参数、返回值) 三、匿名函数与闭包1. 匿名函数(Lambda函…...
基于IDIG-GAN的小样本电机轴承故障诊断
目录 🔍 核心问题 一、IDIG-GAN模型原理 1. 整体架构 2. 核心创新点 (1) 梯度归一化(Gradient Normalization) (2) 判别器梯度间隙正则化(Discriminator Gradient Gap Regularization) (3) 自注意力机制(Self-Attention) 3. 完整损失函数 二…...
嵌入式常见 CPU 架构
架构类型架构厂商芯片厂商典型芯片特点与应用场景PICRISC (8/16 位)MicrochipMicrochipPIC16F877A、PIC18F4550简化指令集,单周期执行;低功耗、CIP 独立外设;用于家电、小电机控制、安防面板等嵌入式场景8051CISC (8 位)Intel(原始…...
【SpringBoot自动化部署】
SpringBoot自动化部署方法 使用Jenkins进行持续集成与部署 Jenkins是最常用的自动化部署工具之一,能够实现代码拉取、构建、测试和部署的全流程自动化。 配置Jenkins任务时,需要添加Git仓库地址和凭证,设置构建触发器(如GitHub…...
