当前位置:网站首页>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开发全套学习资料》送给大家,初衷也很简单,就是希望帮助到想自学又不知道该从何学起的朋友,同时减轻大家的负担。添加下方名片,即可获取全套学习资料哦
边栏推荐
- 递归实现汉诺塔问题
- 论治理与创新 | 2022开放原子全球开源峰会OpenAnolis分论坛圆满召开
- ERROR 2003 (HY000) Can't connect to MySQL server on 'localhost3306' (10061)Solution
- PCL calculates the point cloud coordinate maximum and its index
- Fusion Cloud Native, Empowering New Milestones | 2022 Open Atom Global Open Source Summit Cloud Native Sub-Forum Successfully Held
- Unity框架设计系列:Unity 如何设计网络框架
- The Vue project connects to the MySQL database through node and implements addition, deletion, modification and query operations
- Minesweeper game - C language
- open failed: EACCES (Permission denied)
- Musk talks to the "virtual version" of Musk, how far is the brain-computer interaction technology from us
猜你喜欢

VScode+ESP32 quickly install ESP-IDF plugin

强化学习:从入门到入坑再到拉屎

ERP Production Operation Control Kingdee

打造基于ILRuntime热更新的组件化开发

MySQL开窗函数

Recursive implementation of the Tower of Hanoi problem

PWN ROP

Win10 CUDA CUDNN installation configuration (torch paddlepaddle)

PWN ROP

ENSP, VLAN division, static routing, comprehensive configuration of Layer 3 switches
随机推荐
产学研用 共建开源人才生态 | 2022开放原子全球开源峰会教育分论坛圆满召开
MySQL数据库安装配置保姆级教程(以8.0.29为例)有手就行
城市内涝及桥洞隧道积水在线监测系统
PWN ROP
MySQL based operations
Interview | Cheng Li, CTO of Alibaba: Cloud + open source together form a credible foundation for the digital world
Explanation of
BUG destroyer!!Practical debugging skills are super comprehensive
prompt.ml/15中<svg>标签使用解释
On Governance and Innovation | 2022 OpenAtom Global Open Source Summit OpenAnolis sub-forum was successfully held
Unity框架设计系列:Unity 如何设计网络框架
Error EPERM operation not permitted, mkdir 'Dsoftwarenodejsnode_cache_cacach Two solutions
Open Source Smart Future | 2022 OpenAtom Global Open Source Summit OpenAtom openEuler sub-forum was successfully held
两个地址池r2负责管地址池r1负责管dhcp中继
ERROR 2003 (HY000) Can‘t connect to MySQL server on ‘localhost3306‘ (10061)解决办法
Open Source Database Innovation in the Digital Economy Era | 2022 Open Atom Global Open Source Summit Database Sub-Forum Successfully Held
行业落地呈现新进展 | 2022开放原子全球开源峰会OpenAtom OpenHarmony分论坛圆满召开
Sun Wenlong, Secretary General of the Open Atom Open Source Foundation |
MySQL常见面试题汇总(建议收藏!!!)
HCIP Day 10_BGP Route Summary Experiment