SQL数据库性能优化

  • 1.查询尽量避免使用select *
    • 1.1 增加磁盘开销:数据库本质上是将记录存储在磁盘上,查询操作就是一种进行磁盘IO的行为,我们查询的字段越多,读取的内容也就越多,对IO磁盘的开销也就会增大,特别是某些字段,如TEXT、MEDIUMTEXT或者BLOB等类型,磁盘IO开销增加会更加明显
    • 1.2 加重网络时延:数据每次都通过socket send buffer发送到客户端,查询一次数据量不大,如果一旦有人使用*将TEXT、MEDIUMTEXT或者BLOB 类型查出来,数据量会成指数级上升,网络传输的次数会增加,时间也就会增加
    • 1.3 无法使用覆盖索引:
    • 1.4 多表联合查询会变慢
  • 2.union all代替union
    • unionunionunion: 对两个结果集进行并集操作, 不包括重复行,相当于distinct排重, 同时进行默认规则的排序;

    • union all: 对两个结果集进行并集操作, 包括重复行, 结果全部显示, 不管是不是重复;

    • 因此union all会比union多一个排除重复数据的操作,排除重复数据需要遍历,排序和比较,耗时和CPU资源

  • 3.小表驱动大表(用小的数据集去驱动(可理解为匹配)大的数据集)
    • in子查询:in适用于左边大表,右边小表(优先执行in里面的子查询语句,然后再执行外面的语句),in中值太多导致查询变慢
       
    • exists条件筛选:exists适用于左边小表,右边大表(优先查询主查询语句,再匹配exists条件)
       
  • 4.数据库的批量操作(批量插入、批量更新)
    • 每次插入一条数据,使用循环插入多条数据,需要多次请求数据库,会消耗更多性能
    • 一次插入多条数据,如果数据太多,数据库响应也会很慢,建议批数据控制在500条以内
       
  • 5.多用limit(高效的分页)
    •  SELECT TOP 10 *  FROM (SQL语句) AS T  ORDER BY ID ASC 
  • 6.增量查询
    • 全量查询是你要查询一个数据,你需要输入完整的数据字符然后按回车程序才开始查询,而增量查询只要你输入此数据的第一个字符或字母,程序就将自动查询到它并使之高亮度显示,等待你的选择
  • 7.用连接查询代替子查询
    • 使用子查询可以一次性的完成很多逻辑上需要多个步骤才能完成的SQL操作,同时也可以避免事务或者表锁死,并且写起来也很容易。但是,有些情况下,子查询可以被更有效率的连接(JOIN).. 替代
    • join表的数量不应该超过3个
    • left join关联时,左边要用小表,右边可以用大表,能用inner join的地方,尽量少用left join
       
  • 8.控制索引的数量
    • 索引能够显著的提升查询sql的性能,但索引数量并非越多越好,因为表中新增数据时,需要同时为它创建索引,而索引是需要额为的存储空间的,而且还会有一定的性能消耗。单表索引数量应该控制在5个以内。
    •  如果系统并发量不高,表中的数据量也不多,超过5个也可以,不要超过太多就行。    
    • 对于高并发的系统,单表索引数不要超过5个。能建联合索引,就不要建单个索引。可以将部分查询功能迁移到其他类型的数据库中(???),比如:Elastic Search,HBase等,在业务表中只需要建几个关键索引即可。
       
  • 9.选择合理的字段类型
    • 能用数字类型就不要字符串,字符处理往往比数字要慢
    • 尽可能使用小的类型,比如,用bit存布尔值,用tinyint存枚举值等。长度固定的字符串字段,用char类型,长度可变的字符串字段,用varchar类型。金额字段用decimal,避免精度丢失问题……
  • 10.提升group by 的效率
    • 使用分组时,先缩小数据范围,再进行分组

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

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

相关文章

拼接sql字符串工具类

申明注解 Target({ElementType.FIELD}) Retention(RetentionPolicy.RUNTIME) public interface StrSqlAnnotation {/*** 表字段名称,如"create_name"** return*/String filedName() default "";/*** 类型 STR-字符串 LIST-集合* {link com.ltd.ccci.svc.t…

佛教祭拜小程序-寺庙小程序-纪念馆小程序

大家好,我是程序员小孟。 现在有很多的产品或者工具都开始信息话了,寺庙或者佛教也需要小程序吗? 当然了! 前面我们还开发了很多寺庙相关的小程序,都有相关的介绍: 1,优质的寺庙小程序-H5寺庙网页 今天…

指定文件夹按指定数量分组文件

指定文件夹按指定数量分组文件 背景和环境说明 本程序使用 python 3.10 机器学习,打标中需要对数据集进行分批次,比如10个人,需要分10组,熟练的人分多个点等情况。需要对标注的图片进行分组,分批次导入标注系统进行标注。 依赖包…

机器学习多场景实战

机器学习已不再局限于理论探讨,而是广泛渗透到我们生活的方方面面,成为解决复杂问题、优化决策过程的强有力工具。从智能推荐系统个性化推送你可能喜爱的电影和商品,到金融风控领域精准识别欺诈交易;每一个应用场景都是机器学习技…

(学习笔记)数仓建模

数仓建模 OLAP数仓分层数据模型数据模型建设方法模型建设具体流程模型数据域事实表设计事实表拉链表 数据模型规范表命名(采用阿里one-data设计)字段命名(采用阿里one-data设计)数据模型标注规范 数据模型发展周期 OLAP OLTP:概念全称OnLine Transaction Processin…

实验七、创建小型实验拓扑《计算机网络》

早检到底是谁发明出来的。 一、实验目的 完成本实验后,您将能够: • 设计逻辑网络。 • 配置物理实验拓扑。 • 配置 LAN 逻辑拓扑。 • 验证 LAN 连通性。 二、实验任务 在本实验中,将要求您连接网络设备并配置主机实现基本的网络…

第三部分:领域驱动设计中的SPECIFICATION(规格说明)

领域驱动设计中的SPECIFICATION(规格说明) 1. SPECIFICATION的定义 SPECIFICATION:在领域驱动设计(Domain-Driven Design, DDD)中,规格说明(Specification)是一个明确的业务规则集…

【YOLO系列】YOLOv10论文超详细解读(翻译 +学习笔记)

前言 研究AI的同学们面对的一个普遍痛点是,刚开始深入研究一项新技术,没等明白透彻,就又迎来了新的更新版本——就像我还在忙着逐行分析2月份发布的YOLOv9代码,5月底清华的大佬们就推出了全新的v10。。。 在繁忙之余&#xff0…

第101天:权限提升-Win 本地用户进程注入令牌窃取ATSCPS 服务命令

目录 思维导图 案例一: WIN-本地用户-AT&SC&PS 命令 AT命令 sc PS 案例二:WIN-本地用户-进程迁移注入获取 msf 案例三:WIN-本地&Web-令牌窃取&土豆溢出 令牌窃取 土豆溢出 案例四: uac原理与绕过 思维…

【Qt】Frame和Widget的区别

1. 这两个伙计有啥区别? 2. 区别 2.1 Frame继承自Widget,多了一些专有的功能 Frame Widget 2.2 Frame可以设置边框

C51学习归纳4 --- 矩阵键盘

一、开发板原理图 我们可以看到这个键盘是4*4的,行可以由4个数据接口接收(P1_4~7),列可以由4个数据接口接收(P1_0~3)。 所以我们可让行作为扫描方向,或者列作为扫描方向,进行按键扫描。如何扫描…

VS2017配置OpenCV4.5.1

VS2017配置OpenCV 一、下载OpenCV二、配置OpenCV的电脑环境变量三、配置visual Studio添加路径复制文件到C盘 四、如何使用注意运行时选择Debug x64 五、报错:VSOpencv出现:xxx处有未经处理的异常: Microsoft C 异常: cv::Exception,位于内存…

鸟哥私房菜 摘录

鸟哥私房菜 摘录 解決問題的順序学习的基本方针,提供给大家参考: 解決問題的順序 先查閱硬體(有沒有超頻/記憶體模組/周邊網路設備的好壞等等);檢查 /var/log 底下的登錄檔,尤其是 /var/log/messages 的內容;不要急&a…

@vue-office/excel遇到的问题 error in ./src/components/gem-histogram.base.vue?vuetype=templateid=691572

下载后一直抱这个错误 10:39:39 - Building for production... 10:40:36 ERROR Failed to compile with 41 errors2:40:31 AM 10:40:36 10:40:36 error in ./src/components/gem-histogram.base.vue?vue&typetemplate&id691572bb&scopedtrue 10:40:36 …

踩坑:ffmpeg_extract_subclip() 切分视频时阻塞卡死

之前跑代码时经常卡死,不知道问题出在哪 ffmpeg_extract_subclip(tmp_video_path, test_data["start"], test_data["end"], targetnamevideo_path)后来发现此代码时常会阻塞,不报error不退出,就一直在那卡着。 ffmpeg_…

GaussDB的数种形态

GaussDB作为一种新兴的关系型数据库产品,似乎有点让人摸不着头脑。有朋友问我GaussDB单机版怎么样,有人说GaussDB是分布式数据库,还有人说它是云数据库,还有人会把GaussDB和华为的数据仓库GaussDB DWS混为一谈。确实,公…

算法学习笔记——时间复杂度和空间复杂度

时间复杂度和空间复杂度 常数操作: 固定时间的操作,执行时间和数据量无关 位运算 > 算数运算 > 寻址 > 哈希运算,都是常数操作,哈希运算操作时间最慢 链表的get(i)方法不是常数操作,因为链表不是连续的存储…

颠沛流离学二叉树(完结撒花篇)

本篇会加入个人的所谓鱼式疯言 ❤️❤️❤️鱼式疯言:❤️❤️❤️此疯言非彼疯言 而是理解过并总结出来通俗易懂的大白话, 小编会尽可能的在每个概念后插入鱼式疯言,帮助大家理解的. 🤭🤭🤭可能说的不是那么严谨.但小编初心是能让更多人…

MT2083 屠龙勇者

思路&#xff1a; 跟上题类似&#xff0c;贪心策略&#xff1a;w从小到大排序&#xff0c;每个头找到第一个>d的w 代码&#xff1a; #include <bits/stdc.h> using namespace std; #define ll long long const int N 1e5 10; int n, m; int d[N]; int w[N]; int …

Spring Security 注册过滤器关键点与最佳实践

在 Spring Security 框架中&#xff0c;注册过滤器是实现身份验证和授权的关键组件。正确配置和使用注册过滤器对于确保应用程序的安全性至关重要。以下是一些关于 Spring Security 注册过滤器的注意事项和最佳实践。 过滤器链顺序&#xff1a; 注册过滤器通常位于过滤器链的末…