当前位置:网站首页>MySQL优化:从十几秒优化到三百毫秒
MySQL优化:从十几秒优化到三百毫秒
2022-07-31 04:47:00 【jiey0407】
今天这篇文章还是记录问题的解决过程的。昨天测试测试代码的时候,发现一个功能需要大概十几秒的时间才能执行完。我就去看自己的代码逻辑,完整看了代码之后,凭感觉导致时间长的原因有两部分:一个是mysql的书写问题,另一个可能是循环查询数据库的问题。代码梦梦就不上传了,可能会涉及到公司的隐私问题
下面是粘出来的sql部分,可以看到这个sql都7秒多了,第二张图片是使用explain执行器之后的结果,可以看到五张表只有两张表走了索引,其他的表没有走索引,可以看到type这一列的级别也是ALL。
结果值从好到坏依次是:system > const > eq_ref > ref > fulltext > ref_or_null > index_merge > unique_subquery > index_subquery > range > index > ALL。一般来说,得保证查询至少达到range级别,最好能达到ref,否则就可能会出现性能问题。所以这个sql要优化了。

优化方式:
1,先结合type+key这两列来优化,也就是通过增加索引来优化。一般我会给在where 和order by 子句中用到字段添加索引。所以我就在 d 表上添加了四个索引(deviceId、name、del_flag、project_id),c 表给prdfession也添加了索引。
2,之后再根据Extra这一列进行优化,可以看到上图这两列出现了“Using temporary”、“Using filesort”这两种情况。
“Using temporary”:指的是sql中如果order by或者group by中的字段都来自于其它表而非连接顺序中的第一个表,就会创建一个临时表了。解决方案:可以尝试创建联合索引试试。
“Using filesort”:指的是order by 查询的字段数据量超出了mysql的默认值,导致了order by中的字段不走索引,使用了文件查询,也是导致性能瓶颈的原因。解决方案:可以尝试把排序功能放到代码中实现,sql中不做排序。
当创建了普通索引、联合索引(project_id + name)之后,再看一下sql的执行速度。


可以看到执行速度立马就提了上去,explain命令执行的时候,也会发现type一列全达到了ref级别,extra一列去没有了“Using temporary”、“Using filesort”这两个影响性能的标志。
现在sql的优化就完成了,如果速度还慢的话,就考虑优化代码逻辑的部分辽。
先自我介绍一下,小编13年上师交大毕业,曾经在小公司待过,去过华为OPPO等大厂,18年进入阿里,直到现在。深知大多数初中级java工程师,想要升技能,往往是需要自己摸索成长或是报班学习,但对于培训机构动则近万元的学费,着实压力不小。自己不成体系的自学效率很低又漫长,而且容易碰到天花板技术停止不前。因此我收集了一份《java开发全套学习资料》送给大家,初衷也很简单,就是希望帮助到想自学又不知道该从何学起的朋友,同时减轻大家的负担。添加下方名片,即可获取全套学习资料哦
边栏推荐
- 益智类游戏关卡设计:逆推法--巧解益智类游戏关卡设计
- The Vue project connects to the MySQL database through node and implements addition, deletion, modification and query operations
- el-image tag doesn't work after binding click event
- Unity打灵狐者
- PCL 计算点云坐标最值及其索引
- Musk talks to the "virtual version" of Musk, how far is the brain-computer interaction technology from us
- 【debug锦集】Expected input batch_size (1) to match target batch_size (0)
- The input input box displays the precision of two decimal places
- 数字经济时代的开源数据库创新 | 2022开放原子全球开源峰会数据库分论坛圆满召开
- 重磅 | 开放原子校源行活动正式启动
猜你喜欢

pom文件成橘红色未加载的解决方案

论治理与创新 | 2022开放原子全球开源峰会OpenAnolis分论坛圆满召开

The third is the code to achieve

ERROR 2003 (HY000) Can‘t connect to MySQL server on ‘localhost3306‘ (10061)解决办法

重磅 | 开放原子校源行活动正式启动

XSS靶场(三)prompt to win

【R语言】【3】apply,tapply,lapply,sapply,mapply与par函数相关参数

VScode+ESP32 quickly install ESP-IDF plugin

MATLAB/Simulink&&STM32CubeMX工具链完成基于模型的设计开发(MBD)(三)

PWN ROP
随机推荐
BUG消灭者!!实用调试技巧超全整理
微信小程序使用云函数更新和添加云数据库嵌套数组元素
Vue项目通过node连接MySQL数据库并实现增删改查操作
HCIP第十天_BGP路由汇总实验
Minesweeper game - C language
qlib架构
【wpf】wpf中的那些模板之深度解析
30 Years of Open Source Community | 2022 Open Atom Global Open Source Summit 30 Years of Open Source Community Special Event Held Successfully
Reinforcement learning: from entry to pit to shit
Exsl file preview, word file preview web page method
ERROR 2003 (HY000) Can't connect to MySQL server on 'localhost3306' (10061)Solution
重磅 | 开放原子校源行活动正式启动
C语言表白代码?
行业落地呈现新进展 | 2022开放原子全球开源峰会OpenAtom OpenHarmony分论坛圆满召开
ERROR 1064 (42000) You have an error in your SQL syntax; check the manual that corresponds to your
MySQL数据库安装配置保姆级教程(以8.0.29为例)有手就行
The Vue project connects to the MySQL database through node and implements addition, deletion, modification and query operations
Interview | Cheng Li, CTO of Alibaba: Cloud + open source together form a credible foundation for the digital world
MySQL数据库必会的增删查改操作(CRUD)
open failed: EACCES (Permission denied)