当前位置: 首页 > news >正文

MySQL | 查询接口性能调优、编码方式不一致导致索引失效

背景

最近业务反馈,列表查询速度过慢,需要优化。
到正式环境系统去验证,发现没筛选任何条件的情况下,查询需要三十多秒,而筛选了条件之后需要13秒。急需优化。

先说结论:连表用的字段编码方式不一致导致索引不可用。

查早原因

1.遇到慢查询,首先需要定位慢的原因,先查到接口,看内部实现先初步猜测慢的原因,然后验证。先本地运行项目,找到相应的查询接口,利用MbBatis Log插件获取到分页查询的SQL,拿到数据库改商户去运行,18秒,好久。
在这里插入图片描述

2.而且,因为项目使用的是jeecgboot项目,分页在分页查询之后会先查询总数,拿查总数的SQL来验证。也是要13秒,太慢啦。
在这里插入图片描述

看看执行计划

在这里插入图片描述
3.从SQL来看,u表有用到主键id来做关联,照理说索引应该用主键才对,但执行计划显示并没有使用主键。尝试把u表相关的关联表去掉看看是不是这个表的原因。
在这里插入图片描述
4.速度大幅度提高,说明问题确实出现在u表相关的几个表。去看看u表的结构。索引是存在的,但却并没有用到,很奇怪。再看看编码方式。
在这里插入图片描述

5.再对比一下关联的hr表的sys_user_id字段
在这里插入图片描述
6.两个字段的编码方式不一样,尝试把u表的编码方式改成和hr表一致。再运行SQL。
在这里插入图片描述
7.速度提升不明显,再看看执行计划。
在这里插入图片描述
8.ud表好像也有点问题,索引类型不太正常,看了一下表结构,发现也是编码问题,顺便也改了(d表也有一样问题,也改了)。
在这里插入图片描述

9.看看分页查询的速度
在这里插入图片描述
10.这个速度还可以,再看看执行计划。索引的类型现在要么是eq_ref,要么是ref,并且能用主键的基本也是用主键,符合预期了。
在这里插入图片描述

修改前后执行计划对比


在这里插入图片描述

在这里插入图片描述

11.最后去系统体验,查询速度大概是3.6秒,相比一开始的30多秒,速度提升了七八倍。

分析

本来u表的数据量并不大,但其他表连接之后,数据量已经非常大了,u表的速度稍微慢一点都会很明显。而u表几乎是全表扫描,也就出现了整个接口速度很慢的场景。

想要继续调优,目前的打算是把一部分主查询没有用来筛选的字段拆分开,在外层先查出来再在主SQL里面用in查询。

http://www.lryc.cn/news/225264.html

相关文章:

  • ASUS华硕灵耀X2 Duo UX481FA(FL,FZ)_UX4000F工厂模式原装出厂Windows10系统
  • 企业安全—三保一评
  • “深入理解机器学习性能评估指标:TP、TN、FP、FN、精确率、召回率、准确率、F1-score和mAP”
  • Linux软件包(源码包和二进制包)
  • Leetcode-394 字符串解码(不会,复习)
  • 如何在Linux上搭建本地Docker Registry并实现远程连接
  • assets_common.min.js
  • 前端工程化(vue2)
  • 深度学习(生成式模型)——Classifier Guidance Diffusion
  • Hadoop架构、Hive相关知识点及Hive执行流程
  • P1529 [USACO2.4] 回家 Bessie Come Home 题解
  • Python语法基础(条件语句 循环语句 函数 切片及索引)
  • Debian 9 Stretch APT问题
  • 遍历List集合和Map进行修改和删除报java.util.ConcurrentModificationException错误详解
  • Android从一个APP跳转到另外一个APP
  • 我的创作纪念日——创作者2年
  • 大数据之LibrA数据库系统告警处理(ALM-12032 ommdba用户或密码即将过期)
  • C_3练习题
  • CentOS7 安装Jenkins 2.414.3 详细教程
  • chatglm3-6b记录问答对
  • k8s ingress 代理 mysql 3306端口
  • Informix管理共享内存
  • Webpack 中 Plugin 的作用是什么?常用 plugin 有哪些?
  • CSRF(跨站请求伪造)攻击演示
  • 图解三傻排序 选择排序、冒泡排序、插入排序
  • 【数据结构】树与二叉树(六):二叉树的链式存储
  • 后端Java日常实习生面试(2023年11月10日)
  • 使用iperf3在macOS上进行网络性能测试
  • 09-MySQL主从复制
  • virtualBox虚拟机局域网访问配置