背景
报表统计类的查询是一类耗时的查询。使用场景是QPS并不大,单每个查询由于需要访问较多数据,对大量数据做处理,执行时间较长(通常秒级以上)。
分析
可以将一个大查询分成多个子查询,如果子查询需要访问的数据为整个查询的1/n,则可估计执行时间为1/n。但由于MySQL一个查询只能在单线程中执行,导致即使将一个大查询拆分成多个子查询,多个子查询执行后合并,需要时间为n*1/n=1,仍不能提升其性能。
问题的症结在于只能单线程执行。本方案提供一种引擎Multi-thread-query,让MySQL能够用多线程同时执行多个子查询。由于还要做一点合并工作,整个查询的时间将略大于n个子查询中查询时间最长的一个,即性能接近n倍。
最后一部分举了一个例子,n=3。
方案说明
1、图示

2、用户对MTQ发起查询,MTQ拆分成多个子查询向实体表发起多线程查询。
3、MTQ等待全部线程执行完成后,可以在此基础上执行其他函数操作,如count、avg、group by等。
4、需要修改SQL查询格式,子查询如何拆分,由用户在查询里面指定。
5、适用于每个子查询都是计算量大,返回结果少的情况。(若返回结果越多,合并耗时越大)
举例
以一个统计查询需求为例(数据是构造的,木有神马泄密问题)
一个正常的查询如下:

查询结果
相同机器上使用MTQ查询语法:

MTQ查询结果

可以看到,时间从3s减少为1.2s,查询结果相同,查询语句上可以直接做sum、group by操作。

- 大小: 15.5 KB

- 大小: 44.6 KB

- 大小: 65.7 KB

- 大小: 150.4 KB

- 大小: 63.3 KB
分享到:
相关推荐
文档中提到了一种“MySQL问题分析树”,它将问题的切入点和可能的组成部件进行了层级划分。利用这种分析树,可以更系统地定位问题所在。例如: - 现象和指标通常是第一个切入点; - MySQL系统组成可以从多个角度分析...
并行复制的基本原理在于利用多线程机制来加速从库上的数据同步过程。具体而言,通过并行处理不同的数据库更新操作,可以在很大程度上减少主从之间的延迟。 1. **多线程并行重放Relay Log**:这是并行复制中最直接的...
改造的目标是提高从库(slave)的写入效率,通过事务拆分和多线程SQL运行提升性能。 4. flashback功能的移植:flashback是一种数据恢复技术,可以让数据库快速回滚到之前的状态。姜宇祥将其移植到MySQL中,并结合了...
Java是一种广泛使用的编程语言,具有跨平台、面向对象、多线程等特点。Java在企业级应用开发中占据重要地位,特别是在服务器端应用、Android移动应用开发等方面。Java的生态系统丰富,拥有庞大的社区和框架库,可以...
该工具的思路是在备库的SQL线程执行更新之前,先预加载相关的数据到内存中,通过多个工作线程并行读取和执行查询。这样,即使备库的SQL线程是I/O-bound,也能利用空闲的I/O能力来提升处理速度。`relayfetch`支持ROW...
首先,JAVA是一种广泛使用的面向对象的编程语言,它具有跨平台、高安全性和稳定的性能等特点。在该纹理生成图片系统中,JAVA语言主要承担后端逻辑处理的任务,通过编写各类后端服务接口来实现对前端请求的响应。在...
JAVA是一种广泛应用于企业级应用开发的编程语言,具有跨平台、多线程、面向对象等特性,非常适合作为后端服务的开发语言。SpringBoot是一种基于Spring的轻量级框架,它简化了基于Spring的应用开发,可以让开发者快速...
首先,系统的核心技术栈涉及Java语言,Java是一种广泛应用于企业级开发的编程语言,因其具有跨平台、面向对象、多线程等特性,能够支撑大型系统稳定运行。此外,Java在Web开发中也具有重要地位,这得益于成熟的...
聚焦爬虫系统是一种专门针对特定领域或主题进行数据抓取的网络爬虫系统。与通用爬虫不同,聚焦爬虫更加注重于目标站点的选择和信息的有效提取,从而提高数据质量和抓取效率。 #### 设计思路: 1. **模块化设计**:...
- **JAVA技术**:强大的面向对象编程语言,尤其适用于企业级应用开发,提供了丰富的库和工具,支持多线程、网络通信等功能。 6. **需求分析** - **功能需求**:包括病患信息录入与查询、费用明细计算、缴费记录...
本项目的开发语言选用了Java,利用了Java在多线程处理和内存管理上的优势,确保了平台运行的高效和稳定。配合JDK 1.8版本,项目能够充分利用Java的新特性和性能改进,为用户提供流畅的操作体验。 SpringBoot框架是...
首先,让我们深入了解PHP和Swoole的结合如何提升性能。PHP作为一种解释型语言,其执行效率相对较低,尤其是在处理网络请求和长时间运行的任务时。Swoole提供了底层的TCP、UDP、HTTP、WebSocket等网络通信协议的...
在并行编程项目中,可以看到如何利用多线程提高程序性能或实现异步操作。 8. **设计模式** 项目代码可能运用了多种设计模式,如工厂模式、单例模式、观察者模式等。设计模式是解决常见编程问题的通用解决方案,...
2. **协议设计**:QQ客户端和服务端之间需要一种约定,即通信协议,定义如何打包和解包消息,如何识别不同类型的消息,以及如何处理错误。这可能包括定义特定的报文格式,比如JSON或自定义的二进制格式。 3. **多...
3. **多线程**:为了处理并发用户和实时通信,系统需要有效地利用多线程。Java的线程模型允许开发者创建并管理多个执行路径,确保视频和音频流的同步。 4. **Java并发工具**:Java并发API(如`java.util.concurrent...
在信息技术领域,C/S(Client/Server)架构是一种常见的软件系统设计模式,它将应用程序分为客户端和服务器端两部分,客户端负责用户交互,服务器端则处理数据存储和计算。本篇文章将深入探讨如何利用VC++这一强大的...
Java是一种跨平台的面向对象的编程语言,以其“一次编写,到处运行”的特性而受到广泛欢迎。在聊天系统中,Java提供了丰富的类库和API,如Socket编程接口,用于实现客户端与服务器之间的通信。此外,Java的并发处理...
**动静分离架构** 是一种常见的 Web 架构模式,通过将动态内容和静态内容分别处理,提升网站的整体性能。 - **Nginx + Tomcat 配置**: - Nginx 作为前端代理服务器,处理静态文件请求。 - Tomcat 作为后端应用...
对于性能瓶颈,可以通过优化算法、合理使用数据结构以及多线程技术提高系统的响应速度。 总之,“C++设计-学生成绩管理系统”项目涉及了C++面向对象编程、数据库操作、GUI设计、错误处理等多个方面,是对C++全面...
3. **多线程与异步编程**:为了提高数据收集效率,可采用多线程或异步操作,如Task和async/await关键字。 4. **日志记录**:通过log4net或NLog等库记录系统运行日志,便于调试和问题追踪。 5. **异常处理**:使用try...