【沉浸式解决问题】优化MySQL中多表union速度慢的问题

【DataBase】使用联表查询比较慢如何进行优化? 如果查询的字段比较多,就需要对sql语句进行优化了,通过explain关键字加在慢sql前执行看是否走的索引,如果没有走索引就创建索引。 阅读详情
AI摘要

本文针对MySQL中多表union速度慢的问题展开探讨。同事实现搜索指标名称关键词并按年份统计数量的接口时查询时间过长,作者通过场景还原,提出了一系列解决方案,包括增加索引、使用视图、再次分组和并行查询,有效提升了查询速度。

一、问题描述

同事要实现一个搜索指标名称的关键词,然后按年份统计数量的接口,跟我说时间太长查不出来,无法实现,所以我上手解决一下。


二、场景还原

1. 数据库表

数据按省进行了分库存储,每个库5-6个省表,每张表目前大约两千万的数据量
在这里插入图片描述

2. 查询sql

先简单写个sql实现需求,这里先不考虑查询的关键词,逻辑就是把每一张表里面的数量按年份count统计,通过union拼接起来,再次按年份SUM求和。

SELECT y, SUM(c) 
FROM (
SELECT `year` y, count(*) c FROM guangdong_data_queries GROUP BY `year`
UNION ALL
SELECT `year`, count(*) FROM guangxi_data_queries GROUP BY `year`
UNION ALL
SELECT `year`, count(*) FROM hainan_data_queries GROUP BY `year`
UNION ALL
SELECT `year`, count(*) FROM henan_data_queries GROUP BY `year`
UNION ALL
SELECT `year`, count(*) FROM hubei_data_queries GROUP BY `year`
UNION ALL
SELECT `year`, count(*) FROM hunan_data_queries GROUP BY `year`
) AS a
GROUP BY a.y

三、解决方案

1. 索引

mysql优化第一步,增加索引
查看了一下,果然原表都没有索引,给year和指标名称增加后快了很多,由于是补记录的,忘记当时具体时间了

2. 视图

索引加完了就该考虑减少查询的数据量了
像这种模糊查询然后统计数量的,实际上可以先按照查询字段和统计字段分组,然后统计存到一个视图或者新的表里,提前隐藏掉其他的分类维度以实现缩小数据量,我这个表里面还有地区等分类字段,2000w的数据按指标名称和年份分组后就只有200w了,以后即使是模糊查询也是从这200w的基础上进行查询。

原理就是之前是先模糊匹配再去重,现在是先去重再模糊匹配,把指标名称相同但是年份不同的数据提前统计了,当然就快了,适用于数据不是实时变化更新的,我这个是以前的指标数据,正好符合。

当然,别忘记加索引哦

3. 分组

还能再优化吗,可以的!
可以考虑把上一步生成的结果,再次按年份进行分组统计数量,把年份及对应数量以json的格式存到一个字段,例如

{
	2024:1000
	2023:900
	2022:800
}

这样可以使模糊查询的表再次缩小,假设每个指标平均涉及20个年份,那么查询的数据表大小就只有10w了,模糊匹配就很简单了,之后在内存中把年份统计字段取出来,遍历按年份加起来,相当于把最终要的统计数据提前计算出来了,同样的还可以把其他分类统计字段也存到一个字段里

4. 并行

还可以再优化吗?可以的!而且是很大的优化!
那就是union本身的执行的是串行的(【沉浸式解决问题】Mysql中union连接的子查询是否并行执行),而在连接的子查询非常多的时候,这无疑是致命的,可以通过多线程创建多个连接分别进行查询,在内存中合并最终结果,只要数据库扛得住,就能把速度优化到一个查询的时间!!!


后记

sql优化还有很多的方法和技巧,除了sql本身,也要更多的考虑业务端的优化。


喜欢的点个关注吧><!祝你永无bug!

/*
                   _ooOoo_
                  o8888888o
                  88" . "88
                  (| -_- |)
                  O\  =  /O
               ____/`---'\____
             .'  \\|     |//  `.
            /  \\|||  :  |||//  \
           /  _||||| -:- |||||-  \
           |   | \\\  -  /// |   |
           | \_|  ''\---/''  |   |
           \  .-\__  `-`  ___/-. /
         ___`. .'  /--.--\  `. . __
      ."" '<  `.___\_<|>_/___.'  >'"".
     | | :  `- \`.;`\ _ /`;.`/ - ` : | |
     \  \ `-.   \_ __\ /__ _/   .-` /  /
======`-.____`-.___\_____/___.-`____.-'======
                   `=---='
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
            佛祖保佑       永无BUG
*/
使用Captum库对CIFAR数据集进行模型可解释性分析 为了训练模型,我们需要指定损失函数和优化技术。损失函数用于衡量模型的性能,在训练过程中,我们通过调整模型参数来最小化损失。本教程使用。 阅读详情

相关推荐

【实战指南】WinPE环境下360系统急救箱的病毒查杀全流程解析

本文详细解析了在WinPE环境下使用360系统急救箱进行病毒查杀的全流程。从制作WinPE启动盘到进入PE环境,再到360急救箱的深度使用和系统修复,提供了实用技巧和常见问题解决方案,帮助用户高效清除顽固病毒。

weixin_28568819的博客 538

union all查询慢,优化办法

先简单介绍一下我的项目。 是一个购销存系统(这不重要) 由于数据量太大,所以每天都分一张表,一张表的数据量大概在18W样子,双十一这种节日能到60W数据样子一天。 其中要计算期初的语句 下面还有很多很多,语句很长。每次查一年的期初都要花很久,而且要求一次都查出来,数据量很大。 就是从一张表筛选出数据,然后疯狂union all,这就导致了查询的时间边长。 我的解决办法是,如果你的union al...

RayPick的博客 2万+

激光甲烷传感器DIY指南:从DFB激光器选型到Herriott池光路搭建

本文详细介绍了如何DIY激光甲烷传感器,从DFB激光器选型到Herriott池光路搭建的全过程。通过TDLAS技术实现ppm级甲烷检测,适用于家用燃气泄漏监测和农业沼气监测等场景。文章包含核心器件选型、光路搭建技巧、信号调理方案及系统集成优化,为创客提供实用指南。

f9g0h的博客 597

mysql数据库中使用union all查询速度慢的问题

原SQLselect rcv_idmm_id rcvIdmmId ,work_item_id workItemId,crm_order_id crmOrderId,work_order_id workOrderId, service_no serviceNo,id_no idNo,group_id groupId,order_type orderType,op_time opTime, prpty_name_value prptyNameValue,step_id ,stepId,,ret_info ret

malz_zh的博客 5751

基于毫米波雷达的智能风扇算法设计与实现

摘要:本文设计了一种基于毫米波雷达的智能风扇控制系统,采用FMCW雷达实现人体目标的精准检测与定位。系统通过距离FFT、速度FFT、CFAR检测和AoA估计构建完整的信号处理链路,并针对风扇叶片干扰设计了基于自相关函数的抗干扰算法。创新性地提出了人在开机、多人优先送风、摇头追踪等控制策略。研究采用MATLAB完成全链路算法仿真验证,并在STM32平台上实现实物系统。实验表明,该系统可实现0.15m测距精度和±60°方位角覆盖,有效解决了传统风扇的能源浪费和用户体验问题。本文提供了完整的MATLAB仿真代码和

huanghm88的专栏 405

Python 爬虫实战:共享单车数据采集全流程与市场洞察深度剖析

本文介绍了如何利用Python爬虫技术获取和分析共享单车运营数据。文章从项目背景出发,详细阐述了系统架构设计,包括数据抓取、清洗存储、分析和可视化模块。通过Scrapy、BeautifulSoup等工具实现数据采集,使用Pandas进行数据清洗,并借助Matplotlib进行可视化分析。实战部分展示了爬虫代码示例和城市分布、使用频率等分析案例。最终指出数据驱动分析有助于了解行业现状和市场趋势,未来可结合机器学习等方法进行深入洞察。该技术方案为共享单车行业研究提供了有效的数据支持。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 2235

优化案例3:高频多union表关联穿插拼接完成计数

达梦;DM8;SQL等价改写;SQL优化;分析函数;OR不展开;UNION ALL优化

ai20110304的专栏 615

ESP32-C3模组上跑通OTA升级(3)

ESP32-C3模组上跑通OTA升级(3)

phmatthaus的专栏 1353

mysql使用union all查询慢

如何优化 mysql 使用 union all 查询慢的问题 一、整体流程 在优化 mysql 使用 union all 查询慢的问题时,我们可以按照以下步骤进行操作: gantt title 优化 mysql 使用 union all 查询慢 section 定位问题 定位问题:a1, 2022-...

weixin_31827003的博客 830

海洋浮游生物识海洋浮游生物识别系统:基于YOLOv10的显微图像自动检测与UI别系统:基于海洋浮游生物识别系统:基于YOLOv10的显微图像自动检测与UI展示YOLOv10的显微图像自动检测与UI展示

本文介绍了如何利用YOLOv10模型进行海洋浮游生物的自动识别,旨在提高传统显微镜观测的效率与准确性。研究背景强调了浮游生物在海洋生态系统中的重要性,并指出传统方法的局限性。数据集选用WHOI-Plankton,包含70多种浮游生物的20000多张带标签图像。文章详细描述了YOLOv10模型的安装、数据集配置、训练与测试步骤,并提供了基于PyQt5的图形化检测界面代码。结果显示,模型在精度、召回率和mAP@0.5等指标上表现优异,推理速度达到约30 FPS。最后,文章提出了部署建议和未来优化方向,如集成摄像

YOLO 377

Unity接入抖音小程序侧边栏

Unity接入抖音小程序侧边栏功能实践总结 本文分享了Unity游戏接入抖音小程序侧边栏复访功能的实现过程。针对官方文档不清晰的问题,作者详细介绍了关键实现步骤:通过TT.CheckScene检测侧边栏可用性,利用OnShow事件监听判断用户是否从侧边栏进入,并提供了完整的UI交互代码示例。重点功能包括:检测宿主版本支持、区分侧边栏入口与非侧边栏入口的界面展示、实现跳转侧边栏场景等。文中附有官方文档链接和效果截图,为开发者提供了实用的接入参考方案。

类人_猿的博客 618

SQL优化技巧

文章目录前言一、避免使用select *二、用union all代替union三、小表驱动大表四、批量操作五、多用limit六、in中值太多七、增量查询八、高效的分页九、用连接查询代替子查询十、join的表不宜过多十一、join时要注意十二、控制索引的数量十三、选择合理的字段类型十四、提升group by的效率十五、索引优化 前言         SQL优化是工厂中常见的内容,我曾经也经历过连续半个月只做SQL优化的工作,以下

拥有必珍惜 1871

手把手教你学Simulink--四翼无人机滑模控制器设计与仿真

四翼无人机(Quadcopter)滑模控制(Sliding Mode Control, SMC)是一种鲁棒性很强的非线性控制方法,特别适用于存在模型不确定性和外部扰动的情况。滑模控制器通过强制系统状态进入并保持在一个预定义的滑模面上,从而实现对期望轨迹或姿态的精确跟踪。在这个教程中,我们将使用MATLAB和Simulink来设计并仿真一个基于滑模控制策略的四翼无人机系统。

MHD0815的博客 185

mysql union 慢_mysql查询慢的原因和解决方案

mysql查询慢的原因和解决方案发布时间:2020-08-21 05:43:11来源:脚本之家阅读:68作者:mdxy-dxy查询速度慢的原因很多,常见如下几种:1、没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷)2、I/O吞吐量小,形成了瓶颈效应。3、没有创建计算列导致查询不优化。4、内存不足5、网络速度慢6、查询出的数据量过大(可以采用多次查询,其他的方法降低数据量)7、锁...

weixin_39844880的博客 2748

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

换个思路解决union连接数据过多时,导致查询慢的问题

最近在一开发的过程中用到了union连接多个查询结果,但这种方式是数据量大的时候会导致查询慢。为此想了一些办法来解决之个问题,在开始之前呢,先简单说下union与union all的区别,union将查询结果合并时会将重复的数据合并为一条,union all则不会将重复数据其合并为一条。 业务场景:主表A存储了一个id,这个主键即有可能在B表中,也有可能在C表中(可以简单理解为分表操作,实际业务...

不试一下你怎么知道自己有多强?最不像程序员的程序员的专栏 8875

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Mysql中sql优化方案

Mysql中sql优化方案

m0_52563512的博客 1754

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

互联网中慢SQL优化手段

一个再完美的架构,也会因为一个慢SQL导致系统直接崩溃。 最近在做一个比较有意思的工作,优化系统中的慢SQL,整个过程我是很享受的,往往很多慢SQL都是系统中调用非常频繁的接口,这让我对业务更加熟悉,整个优化过程下来对系统和团队的帮助是非常大的,自己针对这次优化历程总结了一些经验和个人心得,希望可以帮到有需要的小伙伴。 了解MySQL执行过程 图片来源于《高性能MySQL》pdf版。从图片中可以清楚的看到: 客户端发送一条查询给服务器; 服务器先检查查询缓存,如果命中了缓存,则立刻返回存储在缓存中的结果

程铭程铭你快成名的博客 6063

[Mycat2]UnionAll分库分表优化

[Mycat2]UnionAll优化 在不跨数据库的情况下,涉及到多个分表合拼的时候,可以有多个选择,常用的是在Mycat中开启多个后端连接然后使用把返回的行汇总在一起或者在数据库中使用集合运算把分表的数据汇总.上述两种,Mycat2都支持. 在同一个数据库上涉及多个分表,Mycat2会使用union all语法把多个生成的SQL连接起来生成一个新的SQL让数据库执行. Mycat2可以配置生成的每个SQL中出现union all的数量,默认值是5个,它可以汇总6个SQL(表),假如一年分12个表,5个un

junwen的博客 883

解决union all 联合查询,速度慢的问题

子杭的专栏 1万+

sqlserver union执行后变慢_如何分析一条sql的好坏与执行效率

Explain命令在解决数据库性能上是第一推荐使用命令大部分的性能问题可以通过此命令来简单的解决Explain可以用来查看SQL语句的执行效果,可以帮助选择更好的索引和优化查询语句,写出更好的优化语句。使用方法:explain sql语句;示例:在执行以上语句后我们会发现,会有一个执行结果.显示不现的字段名称如下:idselect_typetablepartitionsty...

weixin_39807352的博客 1261

「mysql优化专题」你们要的多表查询优化来啦!请查收(4)

一、多表查询连接的选择: 相信这内连接,左连接什么的大家都比较熟悉了,当然还有左外连接什么的,基本用不上我就不贴出来了。这图只是让大家回忆一下,各种连接查询。 然后要告诉大家的是,需要根据查询的情况,想好使用哪种连接方式效率更高。(这是技术文) 二、MySQL的JOIN实现原理 在MySQL 中,只有一种Join 算法,就是大名鼎鼎的Nested Loop Join,他没有其他很多数据库所提供的...

weixin_33857230的博客 434

深入理解 Union 和 Union All 的区别及优化技巧

在结果集方面,Union 和 Union All 的主要区别在于:Union 会去除重复的记录,而 Union All 不会。也就是说,如果student表、teacher表和doctor表中存在相同的数据,使用 Union 时,这些重复的数据只会显示一次;例如,在查询student、teacher和doctor时,我们要确保选择的字段是相同的,否则可能会出现数据对不齐的情况。需要注意的是,索引的使用要遵循最左前缀原则,即在进行联合查询时,要确保查询条件中使用了索引的最左列。这样,查询性能得到了提升。

weixin_40725027的博客 1769

SQL语句优化之union

SQL语句优化之union。

qq_34861017的博客 758

union 优化方法

union 优化方法 union优化思路: union=>remove duplicate=>sort=>index(don't remove sort)=>index fast full scan(read many index blocks once) union总结: 返回值仅是索引列值的情况下,给返回值列加索引是可以优化union! union and union

2045

你的Mysql很慢?MySQL慢查询分析和性能优化

这边仅仅是从查询语句的角度进行分析,实际上缓存服务变慢的可能性很多,不仅仅是慢查询怎么分析(Slow Log、Explain命令)。还应该全面的分析原因,并给出处理方案,如 分析SQL脚本合理性、建立索引或优化索引、读写分离、垂直+水平分区)、多读少写/冷数据 做缓存、优化数据库的锁竞争、数据库配置调优、硬件资源升级 等等,后面几篇我们慢慢说。

weixin_71690375的博客 1806
上一篇: 【沉浸式解决问题】Mysql中union连接的子查询是否并行执行
下一篇: 【沉浸式解决问题】idea的xml中sql语句报黄:No data sources are configured to run this SQL and provide advanced...
荔枝吻
博客等级 码龄5年 533粉丝 161原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

荔枝吻

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值