【MySQL进阶之路】亿级数据量表SQL调优实战

欢迎关注公众号(通过文章导读关注:【11来了】),及时收到 AI 前沿项目工具及新技术的推送!

在我后台回复 「资料」 可领取编程高频电子书
在我后台回复「面试」可领取硬核面试笔记

文章导读地址:点击查看文章导读!

感谢你的关注!

在这里插入图片描述

亿级数据量表SQL调优实战

先说一下案例背景: 在电商平台中,有一个商品表,数据量级别上亿,有一天晚上突然出现大量的慢查询告警,导致每一个数据库连接执行慢查询耗费几十秒的时间,以至于数据库的连接被打满,无法建立新的连接,导致用户无法查询数据库中相关数据,相关的慢查询语句为:

select * from products where category = 'xx' and sub_category = 'xx' order by id desc limit xx, 10;

简化后的 SQL 语句如上,就是对商品表进行简单的查询,并且进行排序、分页处理

问题分析:

平常在运行的时候,并没有发现出现慢查询,因此 SQL 出现慢查询先查找代码有无提交,或者表中数据有无变化,经过查看,发现运营人员在商品分类表中新添加了几个分类,猜测和这个操作有关系!

那么先查看 SQL 的执行计划,找到慢查询出现的原因,对 SQL 进行 explain 之后,发现执行计划中 possible_key = index_category 表示要使用 index_category 这个索引,但是在 key 这一列的值为 PRIMARY,说明并没有用到 category 这个索引,而是使用了聚簇索引,并且 Extra 列的值为 Using where,因此分析慢查询出现的原因为: 在聚簇索引上扫描数据,并且使用 where 条件对数据进行过滤导致 SQL 执行过慢

image-20240213091943040

那么尝试一下强制让 SQL 走我们自己定义的 index_category 这个索引,发现 SQL 耗时仅仅上百毫秒,慢查询的现象消失了,因此问题就被解决了

通过 force index 就可以让 MySQL 强制走我们自己定义的索引,改变 MySQL 的执行计划!

问题原因:

既然问题解决了,接下来还要分析一下问题出现的原因,为什么 MySQL 不使用我们自己定义的 index_category 索引,而是去扫描聚簇索引呢?

这就是 MySQL 内部的优化,它认为使用了 index_category 这个索引之后,只能查出来索引数据+主键值,而 SQL 语句中是 select *,因此在扫描二级索引之后,还要根据主键值去聚簇索引中回表查询其他列的数据

因此性能不如直接去聚簇索引中扫描,直接根据 id 倒序扫描,取出来 10 条数据就可以了,这样会更快一些

那么 MySQL 优化之后,去聚簇索引中扫描反而出现了慢查询呢?

这就和上边说的运维人员在商品分类表中新添加了几个分类有关系了,由于这几个分类在商品表中没有对应数据,因此导致每一个用户来商品表查询这几个分类的商品时,都发现找不到对应的商品,因此每一次查询都会将整个聚簇索引给全部扫描一遍,上亿的数据,因此导致出现了慢查询!

所以说,这些问题在生产环境中都是无法避免的,因此一定要掌握 MySQL 中的执行计划,才可以通过执行计划找出 SQL 语句为什么执行速度太慢的原因!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/385297.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Spark编程实验六:Spark机器学习库MLlib编程

目录 一、目的与要求 二、实验内容 三、实验步骤 1、数据导入 2、进行主成分分析(PCA) 3、训练分类模型并预测居民收入 4、超参数调优 四、结果分析与实验体会 一、目的与要求 1、通过实验掌握基本的MLLib编程方法; 2、掌握用MLLib…

Elasticsearch深度分页问题

目录 什么是深度分页 深度分页会带来什么问题 深度分页问题的常见解决方案 滚动查询:Scroll Search search_after 总结 什么是深度分页 分页问题是Elasticsearch中最常见的查询场景之一,正常情况下分页代码如实下面这样的: # 查询第一…

Ps:堆栈模式在摄影后期的应用

Photoshop 的堆栈模式 Stack Mode为摄影师提供了一种强大的后期处理能力,通过堆叠和处理多张照片来实现无法单靠一张照片完成的效果。 正确的前期拍摄策略和后期处理技巧可以显著提高最终图像的质量和视觉冲击力。 ◆ ◆ ◆ 前期拍摄通用注意事项 在前期拍摄时&am…

【Linux学习】线程互斥与同步

目录 二十.线程互斥 20.1 什么是线程互斥? 20.2 为什么需要线程互斥? 20.3 互斥锁mutex 20.4 互斥量的接口 20.4.1 互斥量初始 20.4.2 互斥量销毁 20.4.3 互斥量加锁 20.4.4 互斥量解锁 20.4.5 互斥量的基本原理 20.4.6 带上互斥锁后的抢票程序 20.5 死锁问题 死锁…

【医学大模型 动态知识图谱】AliCG概念图 = 知识图谱 + 实时更新、细粒度概念挖掘、个性化适应

AliCG概念图 提出背景能力强化细粒度概念获取长尾概念挖掘分类体系进化对比传统知识图谱 部署方法如何提高信息检索的质量?如何在神经网络中学习概念嵌入?如何在预训练阶段利用概念图? 提出背景 论文: https://arxiv.org/pdf/2106.01686.pdf…

论文解读:MobileOne: An Improved One millisecond Mobile Backbone

论文创新点汇总:人工智能论文通用创新点(持续更新中...)-CSDN博客 论文总结 关于如何提升模型速度,当今学术界的研究往往聚焦于如何将FLOPs或者参数量的降低,而作者认为应该是减少分支数和选择高效的网络结构。 概述 MobileOne(≈MobileN…

《剑指Offer》笔记题解思路技巧优化 Java版本——新版leetcode_Part_2

《剑指Offer》笔记&题解&思路&技巧&优化_Part_2 😍😍😍 相知🙌🙌🙌 相识🍓🍓🍓广度优先搜索BFS🍓🍓🍓深度优先搜索DF…

九、java 继承

文章目录 java 继承3.1 根父类Object3.2 方法重写3.3 继承案例:图形类继承体系3.4 继承的细节3.4.1 构造方法3.4.2 重名与静态绑定3.4.3 重载和重写3.4.4 父子类型转换3.4.5 继承访问权限protected3.4.6 可见性重写3.4.7 防止继承final 3.5 继承是把双刃剑3.5.1 继承…

70.SpringMVC怎么和AJAX相互调用的?

70.SpringMVC怎么和AJAX相互调用的&#xff1f; &#xff08;1&#xff09;加入Jackson.jar&#xff08;2&#xff09;在配置文件中配置json的消息转换器.(jackson不需要该配置HttpMessageConverter&#xff09; <!‐‐它就帮我们配置了默认json映射‐‐> <mvc:anno…

Netty应用——实例-群聊系统(十六)

编写一个Netty群聊系统&#xff0c;实现服务器端和客户端之间的数据简单通讯 (非阻塞)实现多人群聊服务器端:可以监测用户上线&#xff0c;离线&#xff0c;并实现消息转发功能客户端:通过channel可以无阳塞发送消息给其它所有用户&#xff0c;同时可以接受其它用户发送的消息(…

哈夫曼树的学习以及实践

哈夫曼树 哈夫曼树的基本了解哈夫曼树的基本概念创建霍夫曼树的思路编码构建的思路代码实现创建HuffmanTree结点初始化HuffmanTree创建霍夫曼树霍夫曼树编码 哈夫曼树的基本了解 给定 n 个 权值 作为 n 个 叶子节点&#xff0c;构造一颗二叉树&#xff0c;若该树的 带权路径长…

C语言第二十三弹---指针(七)

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】 指针 1、sizeof和strlen的对比 1.1、sizeof 1.2、strlen 1.3、sizeof 和 strlen的对比 2、数组和指针笔试题解析 2.1、⼀维数组 2.2、二维数组 总结 1、si…

C语言每日一题(56)平衡二叉树

力扣网 110 平衡二叉树 题目描述 给定一个二叉树&#xff0c;判断它是否是高度平衡的二叉树。 本题中&#xff0c;一棵高度平衡二叉树定义为&#xff1a; 一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。 示例 1&#xff1a; 输入&#xff1a;root [3,9,20,…

牛客错题整理——C语言(实时更新)

1.以下程序的运行结果是&#xff08;&#xff09; #include <stdio.h> int main() { int sum, pad,pAd; sum pad 5; pAd sum, pAd, pad; printf("%d\n",pAd); }答案为7 由于赋值运算符的优先级高于逗号表达式&#xff0c;因此pAd sum, pAd, pad;等价于(…

Linux系统之部署File Browser文件管理系统

Linux系统之部署File Browser文件管理系统 一、File Browser介绍1.1 File Browser简介1.2 File Browser功能1.3 File Browser使用场景 二、本地环境介绍2.1 本地环境规划2.2 本次实践介绍 三、检查本地环境3.1 检查本地操作系统版本3.2 检查系统内核版本 四、安装File Browser4…

Linux_线程

线程与进程 多级页表 线程控制 线程互斥 线程同步 生产者消费者模型 常见概念 下面选取32位系统举例。 一.线程与进程 上图是曾经我们认为进程所占用的资源的集合。 1.1 线程概念 线程是一个执行分支&#xff0c;执行粒度比进程细&#xff0c;调度成本比进程低线程是cpu…

SpringCloud-Eureka服务注册中心测试实践

5. Eureka服务注册中心 5.1 什么是Eureka Netflix在涉及Eureka时&#xff0c;遵循的就是API原则.Eureka是Netflix的有个子模块&#xff0c;也是核心模块之一。Eureka是基于REST的服务&#xff0c;用于定位服务&#xff0c;以实现云端中间件层服务发现和故障转移&#xff0c;服…

fast.ai 深度学习笔记(六)

深度学习 2&#xff1a;第 2 部分第 12 课 原文&#xff1a;medium.com/hiromi_suenaga/deep-learning-2-part-2-lesson-12-215dfbf04a94 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 来自 fast.ai 课程的个人笔记。随着我继续复习课程以“真正”理解它&#xff0c;…

Java 基于微信小程序的私家车位共享系统

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…

LC 987. 二叉树的垂序遍历

987. 二叉树的垂序遍历 难度 : 困难 题目大意&#xff1a; 给你二叉树的根结点 root &#xff0c;请你设计算法计算二叉树的 垂序遍历 序列。 对位于 (row, col) 的每个结点而言&#xff0c;其左右子结点分别位于 (row 1, col - 1) 和 (row 1, col 1) 。树的根结点位于 …