MySQL语句优化案例

1.案例in查询条件很慢

其中in中共115个

select 
id,detail_id,request,response,utime,ctime 
from response_detaill 
where detaill_id in
(26371986, 26372242, 26371984, 26371990, 26400150, 26371988, 26371994, 26371992,26371998, 26371996, 26371970, 26371968, 26371974, 26400390, 26371972, 26371978,26371976, 26371982, 26371980, 26400178, 26372018, 26400435, 26372016, 26402486, 
26372022, 26372534, 26372020, 26372026, 26372024, 26372030, 26404286, 26404287, 
26372028, 26404285, 26372002, 26400163, 26400160, 26372000, 26372006, 26372004, 
26400165, 26372010, 26372008, 26372014, 26372012, 26372050, 26372048, 26404290, 
26404291, 26404288, 26404289, 26404294, 26404292, 26404293, 26372042, 26400201, 
26372044, 26372338, 26372082, 26372346, 26468863, 26372064, 26372836, 26372068, 
26400235, 26402028, 26400018, 26400019, 26400022, 26400020, 26400024, 26372892, 
26372124, 26372098, 26372864, 26400011, 26400520, 26400012, 26372402, 26400048, 
26402356, 26400315, 26468922, 26400056, 26372926, 26400063, 26372668, 26372156, 
26372128, 26400042, 26400046, 26372142, 26400594, 26372434, 26402129, 26400593, 
26400071, 26400586, 26372426, 26400335, 26400588, 26371954, 26371952, 26371958, 
26371956, 26371962, 26371960, 26371966, 26371964, 26402401, 26372708, 26371946, 
26371944, 26371950, 26371948)

慢查询监控平台:

查看该sql语句的执行计划,type:range指的是有范围的索引扫描,相对于index的全索引扫描,它有范围限制,因此要优于index。关于range比较容易理解,出现了range,则一定是基于索引的。

分析原因:

执行计划中显示,是使用了索引,所以不是索引失效的问题

回表次数增加:如果 IN 列表中的值很多,即使使用了索引,也需要进行大量的回表操作,会导致查询变慢,需要的字段是大文本,无法建立索引,使用覆盖索引优化。

网络传输:100M的数据量,增加了传输耗时

内存缓冲限制:Mysql中一页数据是16KB,每条数据需要多个分页数据,增加了磁盘IO

综合来看,是数据量太大导致,考虑只查询需要的字段,不用返回所有的字段,减少数据量。

修改:

select 
id,detail_id,response,ctime 
from response_detaill 
where detaill_id in
(26371986, 26372242, 26371984, 26371990, 26400150, 26371988, 26371994, 26371992,26371998, 26371996, 26371970, 26371968, 26371974, 26400390, 26371972, 26371978,26371976, 26371982, 26371980, 26400178, 26372018, 26400435, 26372016, 26402486, 
26372022, 26372534, 26372020, 26372026, 26372024, 26372030, 26404286, 26404287, 
26372028, 26404285, 26372002, 26400163, 26400160, 26372000, 26372006, 26372004, 
26400165, 26372010, 26372008, 26372014, 26372012, 26372050, 26372048, 26404290, 
26404291, 26404288, 26404289, 26404294, 26404292, 26404293, 26372042, 26400201, 
26372044, 26372338, 26372082, 26372346, 26468863, 26372064, 26372836, 26372068, 
26400235, 26402028, 26400018, 26400019, 26400022, 26400020, 26400024, 26372892, 
26372124, 26372098, 26372864, 26400011, 26400520, 26400012, 26372402, 26400048, 
26402356, 26400315, 26468922, 26400056, 26372926, 26400063, 26372668, 26372156, 
26372128, 26400042, 26400046, 26372142, 26400594, 26372434, 26402129, 26400593, 
26400071, 26400586, 26372426, 26400335, 26400588, 26371954, 26371952, 26371958, 
26371956, 26371962, 26371960, 26371966, 26371964, 26402401, 26372708, 26371946, 
26371944, 26371950, 26371948)

修改之后查询时间变为100ms,由原来的1s变为100ms,由此可见,是因为数据太大导致网络延时与Mysql的内存限制

还可以修改为连表查询join

2. 分页查询很慢

背景:负责的项目中慢查询数量报警,通过数据库分析诊断平台可以看出有一条sql命令慢查询数量超过阈值,是一个分页查询,需要查询某个范围内的数据,使用limit,深度分页导致慢查询。

select * from flow where group_id=3290 limit 150000,100;

分析:这条查询语句一直都没有问题,最近突然有问题,发现最近几次使用的数据集合都是很大的,导致每次分页limit偏移量较大,平均查询时间>2s。explain分析执行计划,使用了非唯一索引。即使有索引,索引只能加速定位,但无法直接“跳转到第 N 条”(因为索引存储的是键值,而不是行号)。

解决:采用游标分页,将查询上一页的最大id返回,下一页的查询基于此id

select * from flow where group_id=3290 AND id>150000 limit 100;

深度分页的本质:

LIMIT offset, size 的工作原理:
数据库会先读取 offset + size 条数据,再丢弃前 offset 条。

第一条查询实际加载了 5000600 行数据,再丢弃前 5000000 行。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

能行为监测算法:低成本下的高效管理

AI监控智慧公司管理:降本增效的实践与突破一、背景:经济压力下的管理转型需求在经济下行周期,企业面临人力成本攀升、管理效率低下、安全风险频发等多重挑战。传统监控依赖人工巡检,存在响应滞后、误判率高、数据孤岛等问题&#…

当前(2024-07-14)视频插帧(VFI)方向的 SOTA 基本被三篇顶会工作占据,按“精度-速度-感知质量”三条线总结如下,供你快速定位最新范式

当前(2024-07-14)视频插帧(VFI)方向的 SOTA 基本被三篇顶会工作占据,按“精度-速度-感知质量”三条线总结如下,供你快速定位最新范式。感知质量最佳:CVPR 2024 ‑ PerVFI • 关键词:…

开源 python 应用 开发(七)数据可视化

最近有个项目需要做视觉自动化处理的工具,最后选用的软件为python,刚好这个机会进行系统学习。短时间学习,需要快速开发,所以记录要点步骤,防止忘记。 链接: 开源 python 应用 开发(一&#xf…

基于深度学习的情感分析模型:从文本数据到模型部署

前言 情感分析(Sentiment Analysis)是自然语言处理(NLP)领域中的一个重要应用,它通过分析文本数据来判断文本的情感倾向,例如正面、负面或中性。随着社交媒体的兴起,情感分析在市场调研、品牌管…

使用python 实现一个http server

下面是一个使用 Python 内置库 http.server 的简单 HTTP 服务器实现。不需要安装任何第三方库,非常适合做演示或开发测试用。 from http.server import HTTPServer, BaseHTTPRequestHandlerclass SimpleHTTPRequestHandler(BaseHTTPRequestHandler):def do_GET(self…

Redis技术笔记-主从复制、哨兵与持久化实战指南

目录 前言 一、Redis主从复制 (一)Redis主从复制介绍 (二)基本环境准备 (三)工作原理 (四)结构模式 (五)一主一从(无密码) 配置…

sundog公司的SilverLining SDK库实现3d动态云层和下雨、下雨、雨夹雪效果

OSG系列文章目录 文章目录OSG系列文章目录前言一、3d动态云与下雨、下雪效果不能同时出现二、3d动态云与下雨、下雪效果不能同时出现的原因三、解决办法:前言 先看下效果:下雨 效果:下雪 效果:雨夹雪 🌤️ Sundo…

Python:简易的 TCP 服务端与客户端示例

下面是一个完整的 TCP 服务端与客户端示例,适用于 Python 3,使用 socket 模块,并正确处理了中文传输与异常情况,支持基本的多轮通信。TCP 服务端(server_tcp.py)import socket HOST 127.0.0.1 # 监听本地…

文心一言 4.5 开源深度剖析:中文霸主登场,开源引擎重塑大模型生态

> 百度用一场彻底的开源风暴,宣告中文大模型进入性能与普惠并重的新纪元——这里没有技术黑箱,只有开发者手中跃动的创新火花。 2025年,当全球大模型竞赛进入深水区,百度文心一言4.5的开源如同一颗重磅炸弹,彻底打破了“闭源即领先”的固有认知。这一次,中国团队不…

解决“Windows 无法启动服务”问题指南

错误1067:进程意外终止一、重启计算机有时系统出现临时性的服务故障,重启计算机就可以有效解决问题。需要注意的是,在重启之前,需要保存好所有未保存的工作,以免数据丢失。重启完成后,再次尝试启动相关服务…

银河麒麟(Kylin) - V10 GFB高级服务器操作系统ARM64部署昇腾910b训练机以及Docker安装

银河麒麟(Kylin) - V10 GFB高级服务器操作系统ARM64部署昇腾910b训练机以及Docker安装 原因 项目需要使用Deepseek-r1-distill-qwen-32b来做训练,在此记录 测试环境 服务器配置 型号:G5680V2 CPU:CPU 4Kunpeng 920-5250 NPU:NP…

消息中间件(Kafka VS RocketMQ)

目录 一、概要介绍 二、架构与原理 三、消费模式 1、Kafka—纯拉模式 2、RocketMQ—拉模式 3、RocketMQ—推模式 4、模式对比 四、特殊消息 1、顺序消息 2、消息过滤 3、延迟消息 4、事务消息 5、广播消息 五、高吞吐 六、高可用 七、高可靠 一、概要介绍 Apa…

MyBatis级联查询深度解析:一对多关联实战指南

MyBatis级联查询深度解析:一对多关联实战指南在实际企业级开发中,单表操作仅占20%的场景,而80%的业务需求涉及多表关联查询。本文将以一对多关系为例,深入剖析MyBatis级联查询的实现原理与最佳实践,助你掌握高效的数据…

搜索框的显示与隐藏(展开与收起)

效果如下直接上代码v-if"showAll || 0 < 3" 的意思是&#xff1a;如果 showAll 为 true&#xff0c;或者 0 小于 3&#xff0c;这个表单项就会显示。<el-form :inline"true" class"demo-form-inline" size"default" label-width…

01 启动流程实例

前言本文基于 Activiti 7.0.0.GA 源码&#xff0c;研究 Activiti 如何启动一个流程实例。审批流程图如下图&#xff0c;在此流程图中&#xff0c;存在两个UserTask节点&#xff0c;第一个节点是主管审批&#xff0c;第二个节点是产品经理审批&#xff0c;两个节点中间有一个排他…

LeetCode--47.全排列 II

解题思路&#xff1a;1.获取信息&#xff1a;给定一个可包含重复数字的序列&#xff0c;按任意顺序返回所有不重复的全排列提示信息&#xff1a;1 < nums.length < 8-10 < nums[i] < 102.分析题目&#xff1a;相较于46题&#xff0c;它多限制了一个条件&#xff0c…

vue3 服务端渲染时请求接口没有等到数据,但是客户端渲染是请求接口又可以得到数据

原因是: 服务端请求 后端接收到 请求 ‘Content-Type’: ‘application/x-www-form-urlencoded; charsetUTF-8’ 直接返回错误的code 200000 增加 data: {} 服务端请求 后端接收到 请求 ‘Content-Type’: ‘application/json; charsetUTF-8’ 服务端请求就可以得到数据 expo…

Linux 文件操作命令大全:从入门到精通的实用指南

Linux 文件操作命令大全&#xff1a;从入门到精通的实用指南 在 Linux 系统中&#xff0c;文件操作是日常工作的核心内容之一。无论是开发者、运维工程师还是 Linux 爱好者&#xff0c;掌握常用的文件操作命令都能极大提升工作效率。本文将详细介绍 Linux 系统中最常用的文件操…

Linux开发利器:探秘开源,构建高效——基础开发工具指南(上)【包管理器/Vim】

♥♥♥~~~~~~欢迎光临知星小度博客空间~~~~~~♥♥♥ ♥♥♥零星地变得优秀~也能拼凑出星河~♥♥♥ ♥♥♥我们一起努力成为更好的自己~♥♥♥ ♥♥♥如果这一篇博客对你有帮助~别忘了点赞分享哦~♥♥♥ ♥♥♥如果有什么问题可以评论区留言或者私信我哦~♥♥♥ ✨✨✨✨✨✨个人…

基于迁移学习的培养基配方开发方法

本文为学习笔记&#xff0c;原文专利&#xff1a; 中国专利公布公告 然后输入 202110622279.7 概览 一、问题背景 传统培养基开发痛点&#xff1a; 数据依赖&#xff1a;需大量细胞实验&#xff08;1000配方&#xff09;训练专用模型 迁移性差&#xff1a;A细胞模型无法直接…