当前位置:网站首页>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开发全套学习资料》送给大家,初衷也很简单,就是希望帮助到想自学又不知道该从何学起的朋友,同时减轻大家的负担。添加下方名片,即可获取全套学习资料哦
边栏推荐
- 【小土堆补充】Pytorch学习笔记_Anaconda虚拟环境使用
- MySQL database must add, delete, search and modify operations (CRUD)
- MySQL database backup
- Hand in hand to realize the picture preview plug-in (3)
- Open Source Smart Future | 2022 OpenAtom Global Open Source Summit OpenAtom openEuler sub-forum was successfully held
- ERROR 1819 (HY000) Your password does not satisfy the current policy requirements
- Win10 CUDA CUDNN installation configuration (torch paddlepaddle)
- 行业落地呈现新进展 | 2022开放原子全球开源峰会OpenAtom OpenHarmony分论坛圆满召开
- mysql基础知识(二)
- Exsl file preview, word file preview web page method
猜你喜欢

【云原生】DevOps(五):集成Harbor

产学研用 共建开源人才生态 | 2022开放原子全球开源峰会教育分论坛圆满召开

HCIP Day 10_BGP Route Summary Experiment

Go语学习笔记 - 处理超时问题 - Context使用 | 从零开始Go语言

qlib架构

Industry-university-research application to build an open source talent ecosystem | 2022 Open Atom Global Open Source Summit Education Sub-Forum was successfully held

Two address pools r2 are responsible for managing the address pool r1 is responsible for managing dhcp relays

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

npm、nrm两种方式查看源和切换镜像

ERROR 2003 (HY000) Can‘t connect to MySQL server on ‘localhost3306‘ (10061)
随机推荐
MySQL数据库安装配置保姆级教程(以8.0.29为例)有手就行
强化学习:从入门到入坑再到拉屎
Error EPERM operation not permitted, mkdir 'Dsoftwarenodejsnode_cache_cacach Two solutions
Recursive implementation of the Tower of Hanoi problem
Can't load /home/Iot/.rnd into RNG
Unity shader forge和自带的shader graph,有哪些优缺点?
【线性神经网络】softmax回归
重磅 | 基金会为白金、黄金、白银捐赠人授牌
PWN ROP
行业落地呈现新进展 | 2022开放原子全球开源峰会OpenAtom OpenHarmony分论坛圆满召开
【debug锦集】Expected input batch_size (1) to match target batch_size (0)
已解决:不小心卸载pip后(手动安装pip的两种方式)
MySQL database addition, deletion, modification and query (detailed explanation of basic operation commands)
Two address pools r2 are responsible for managing the address pool r1 is responsible for managing dhcp relays
MySQL忘记密码怎么办
mysql数据库安装(详细)
30 Years of Open Source Community | 2022 Open Atom Global Open Source Summit 30 Years of Open Source Community Special Event Held Successfully
微软 AI 量化投资平台 Qlib 体验
ENSP, VLAN division, static routing, comprehensive configuration of Layer 3 switches
ERROR 1819 (HY000) Your password does not satisfy the current policy requirements