Mysql sql优化

article/2025/9/18 11:28:37

这里引用深入Mysql实战

为什么要优化

  1. 提高资源利用率
  2. 避免短板效应
  3. 提高系统吞吐量
  4. 同时满足更多用户的在线需求

简单来说,优化的目的是为了提高资源的利用率,让资源充分发挥价值。常见场景下,一台服务器有四大资源:cup、内存网络和磁盘,一旦其中某个资源出现问题,整个服务器提供服务的能力就会变差,优化的最终目的是为了同时满足更多用户的的在线需求

Mysql优化目标

Mysql 优化的目标主要有三个:

  1. 减少磁盘IO,在数据库中主要是来自于像全表扫描这种扫描大量数据快的场景,然后就是日志以及数据块的写入所带俩的压力。
  2. 减少网络带宽主要是包括两个方面,第一,sql查询时,返回太多数据;第二,插入场景下交互次数过多。
  3. 降低cpu的消耗,主要包括三个方面,第一,Mysql本身的逻辑(join多表链接),第二,额外的技术操作,比如排序分组(order by、group by)第三,是聚合函数(max、min、sum)

下面是我对sql优化的一些总结,如有错误欢迎指出来

减少IO磁盘优化

  1. 可以通过加索引来避免全表扫描。
  2. select查询的时候不使用select * ,新增的时候同理
  3. 尽量避免使用子查询(原因写在子查询优化)

减少网络带宽优化

  1. sql查询时使用limit减少查询返回的数据

  2. 减少插入情况下交互次数(如下)

批量插入语句:

insert into test (id,name) values(1,'张山')
insert into test (id,name) values(2,'李四')
insert into test (id,name) values(3,'王五')

可改写成如下形式:

insert into test (id,name) values(1,'张山'),(2,'李四'),(3,'王五')

降低cpu消耗

  1. order by 优化,给order by 字段添加索引避免额外的排序,减少cup资源的消耗
  2. group by 优化,也可以给group by 添加索引
  3. 是聚合函数(max、min、sum)可以创建一张统计表,用定时任务把数据更新到统计表,之后直接查询统计表即可

其他 Select优化

子查询优化

为什么要对子查询进行优化:
第一点:执行子查询时,MySQL 需要为内层查询语句的查询结果建立一个临时表 ,然后外层查询语句从临时表中查询记录。查询完毕后,再撤销这些临时表 。这样会消耗过多的 CPU 和 IO 资源,产生大量的慢查询。
第二点:子查询的结果集存储的临时表,不论是内存临时表还是磁盘临时表都 不会存在索引 ,所以查询性能会受到一定的影响;对于返回结果集比较大的子查询,其对查询性能的影响也就越大。
优化方案Join替代
如下sql:

select * from test where id in (select test1_id from test2)

改写成:

select * from test t1 left join test2 t2 on t1.id = t2.test1_id

Limit 优化

为什么要对Limit进行优化:
当数据库有10w条数据,此时我要查出最后10条就得 limit 99990,10此时Mysql排序出前99990条记录后仅仅需要返回最后10条记录,前99990条记录造成额外的代价消耗
优化方案一使用覆盖索引,记录直接从索引中获得,效率最高,但是这种情况只适合查询字段比较少的情况(毕竟你也不可能给所有字段添加索引) ·

什么是覆盖索引:
第一,非主键查询,入口是二级索引(就是你平时定义的普通索引),通过二级索引,第一个过程返回聚集索引的id(主键id)因为二级索引里面存的就是聚集索引的id;第二个过程是回表,相当于再做一次数据检索,然后从聚集索引中获取数据
第二,主键查询,入口是直接通过聚集索引的id,可以在聚集索引中获取数据
第三,覆盖索引,入口是二级索引,直接从二级索引当中获取数据,前提是你所查询的字段都带有索引
优化方案二sql改写
优化前提是create_time字段有索引,思路是从索引中取出20条满足条件的主键值,然后回表获取记录

select * from test t1 inner join (select id from test order by create_time limit 99990,10) t2 on t1.id = t2.id

Join 优化

  1. 当你使用left join 或者right join 时使用小表驱动原则减少循环查询次数,或者可以使用inner join 替代,inner join 会默认使用小表驱动
  2. 关联字段添加索引
    在这里插入图片描述
    如上图所示,这两个表join关联。sql语句执行计划,出现了join_buffer,执行计划部分Bloack Nested-Loop
    join_buffer(Bloack Nested-Loop)表示不能通过索引去做关联条件的匹配
    我们可以看到,通过b表关联访问a时,rows是127042,整个访问过程的代价特别大,对于这种场景是给关联条件添加索引,加好索引后我们再看执行计划
    在这里插入图片描述
    可以看到rows从127042降到了125,前面执行时间接近2分钟,后面只需要0.31秒

http://chatgpt.dhexx.cn/article/t0uslcRI.shtml

相关文章

sql优化的15个小技巧

最近找了找怎么优化SQL,总结了15个基础技巧 因为最近一直在写sql的原因,所以需要知道sql该怎么优化,怕哪一天线上的接口,出了问题,需要优化,就需要采用改造成本最小的. 先上个导图 1.避免使用 select * 很多时候,我们写sql语句时,直接使用select *&am…

聊聊sql优化的15个小技巧

前言 sql优化是一个大家都比较关注的热门话题,无论你在面试,还是工作中,都很有可能会遇到。 如果某天你负责的某个线上接口,出现了性能问题,需要做优化。那么你首先想到的很有可能是优化sql语句,因为它的…

SQL优化的方法

(1)建立物化视图或尽可能减少多表查询。 (2)以不相干子查询替代相干子查询。 (3)只检索需要的列。 (4)用带in的条件子句等价替换or子句。 (5)经常提交com…

sql优化的N种方法_持续更新

当你访问网站的时候,有的时候会慢的想让你砸电脑,这个时候服务器要背锅了吗? 不,要背锅的不仅仅是服务器,数据库也有很大责任,不负责任的sql开发者更会让你崩溃的.为了提高sql响应速度,还是好好了解下sql的优化吧 sql优化的方式 一:sql性能分析 sql优化首先要对sql的消耗时…

sql优化常用的几种方法:19种最有效的sql优化技巧

我们来谈谈项目中常用的MySQL优化方法,共19条,具体如下: 1、EXPLAIN 做MySQL优化,我们要善用EXPLAIN查看SQL执行计划。 下面来个简单的示例,标注(1、2、3、4、5)我们要重点关注的数据&#x…

sql优化的15个小技巧(必知五颗星),面试说出七八个就有了

目录 前言 1 避免使用select * 2 用union all代替union 3 小表驱动大表 4 批量操作 5 多用limit 6 in中值太多 7 增量查询 8 高效的分页 9 用连接查询代替子查询 10 join的表不宜过多 11 join时要注意 12 控制索引的数量 13 选择合理的字段类型 14 提升group by的…

MySQL高级篇(SQL优化、索引优化、锁机制、主从复制)

目录 0 存储引擎介绍1 SQL性能分析2 常见通用的JOIN查询SQL执行加载顺序七种JOIN写法 3 索引介绍3.1 索引是什么3.2 索引优劣势3.3 索引分类和建索引命令语句3.4 索引结构与检索原理3.5 哪些情况适合建索引3.6 哪些情况不适合建索引 4 性能分析4.1 性能分析前提知识4.2 Explain…

Sql优化总结!详细!(2021最新面试必问)

Sql优化 Sql执行顺序基础Sql优化查询SQL尽量不要使用select *,而是具体字段避免在where子句中使用or来连接条件使用varchar代替char尽量使用数值替代字符串类型查询尽量避免返回大量数据使用explain分析你SQL执行计划是否使用了索引及其扫描类型创建name字段的索引优…

如何破解VS2015(使用秘钥)

【时间】2018.10.07 【题目】如何破解VS2015(使用秘钥) 安装完vs2015 企业版/专业版后,在菜单帮助---注册产品,会显示产品试用期30天,怎么破解呢?其实只要输入相应的秘钥即可完成破解。如若不破解&#x…

vs2015激活码

microsoft visual studio2015是微软推出的一款集程序设计网页开发于一身的开发工具。microsoft visual studio 2015支持c,c,c#以及手机应用开发,用它所写的目标代码适用于微软支持的所有平台,包括Microsoft Windows、Windows Mobile、Windows CE、.NET F…

VS2017 激活密钥

【时间】2018.11.26 【题目】VS2017 激活密钥 一、激活秘钥 Enterprise[企业版]: NJVYC-BMHX2-G77MM-4XJMR-6Q8QF Professional[专业版]: KBJFW-NXHK6-W4WJM-CRMQB-G3CDH 二、秘钥使用 使用位置在 帮助 -- 注册商品 中: 输入秘钥后,激活成功后&a…

Android APP性能测试以及性能指标

Android的app性能测试包括的测试项:Activity响应时间,帧率,内存,cpu消耗,耗电量,冷启动 Activity响应时间的相关测试 查看当前APP打开的页面命令: adb shell dumpsys activity | findstr mResumedActivity然后用命令去打开APP的某个activ…

APP性能测试之GT 测试

APP性能测试之GT 测试 1 什么是 GT GT(随身调)是腾讯研发的开源 APP 随身调测平台,它是直接运行在手机上的“集 成调测环境”(IDTE, Integrated Debug Environment)。 GT 仅凭一部手机,无需连接电脑&a…

面试百问:如何测试App性能?

APP性能测试几乎是客户端面试必问。 为什么要做App性能测试 如果APP总是出现卡顿或网络延迟的情况,降低了用户的好感,用户可能会抛弃该App,换同类型的其他应用。如果APP的性能较好,用户体验高,使用起来丝滑顺畅&…

APP性能测试之IOS性能测试-instruments使用

最近在做APP的性能测试,已经在运行阶段,所以来总结下,本文章主要是讲的是IOS性能测试,我这边做的是内存漏洞分析和app启动时间/CPU占用/Core Animation等等,基本都试过了,说一下搭建过程吧 1.准备一个MAC电…

如何进行App性能测试?SoloPi是最佳选择!

目录 引言 SoloPi简介 SoloPi特点 SoloPi的主要功能 下载SoloPi 安装SoloPi 使用SoloPi进行性能测试 性能数据查看与记录 环境加压 响应耗时计算工具 注意事项 Solopi提供的各项性能指标介绍 引言 大家好!我是凡哥。 今天我想跟你们分享一下如何进行A…

App性能测试以及测试方法技巧

性能专项我们关注哪些: 1.关注资源消耗(CPU、内存、流量、功耗) 2.启动耗时(冷启、热启),(这个也是很多云测时用到的一个指标) 3.主要页面加载时间 4.内存泄漏、抖动、卡顿、页面渲染…

移动APP性能测试

移动APP性能测试 - 走看看 一、 App 性能指标 App 性能问题如 app 使用时卡顿严重或者加载页面慢,cpu 占用率高,app 闪退等,在测试过程中,则需特别关注性能方面的体验,app 性能差,通常会导致用户对 app 的…

如何进行app性能测试,app性能测试应关注的测试点

随着智能化生活的推进,我们生活中不可避免的要用到很多程序app。有的APP性能使用感很好,用户都愿意下载使用,而有的APP总是出现卡顿或网络延迟的情况,那必然就降低了用户的好感。所以APP性能测试对于软件开发方来说至关重要&#…

【项目】HTTP服务器

⭐️ 本博客介绍的是一个自主实现HTTP服务的一个项目,这要介绍的是项目实现的整个过程,用到的技术、遇到的问题以及都是如何解决的。想完成该项目,需要我们对HTTP有了解,这里可以查看我的往期博客——HTTP协议。这里还会用到流式套…