`
丁林.tb
  • 浏览: 792555 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

MySQL 利用多线程提升查询性能的一种思路

阅读更多

背景

       报表统计类的查询是一类耗时的查询。使用场景是QPS并不大,单每个查询由于需要访问较多数据,对大量数据做处理,执行时间较长(通常秒级以上)。

      

分析

可以将一个大查询分成多个子查询,如果子查询需要访问的数据为整个查询的1/n,则可估计执行时间为1/n。但由于MySQL一个查询只能在单线程中执行,导致即使将一个大查询拆分成多个子查询,多个子查询执行后合并,需要时间为n*1/n=1,仍不能提升其性能。

问题的症结在于只能单线程执行。本方案提供一种引擎Multi-thread-query,让MySQL能够用多线程同时执行多个子查询。由于还要做一点合并工作,整个查询的时间将略大于n个子查询中查询时间最长的一个,即性能接近n倍。

最后一部分举了一个例子,n=3

 

方案说明

 

1、图示

 

2、用户对MTQ发起查询,MTQ拆分成多个子查询向实体表发起多线程查询。

3、MTQ等待全部线程执行完成后,可以在此基础上执行其他函数操作,如countavggroup by等。

4、需要修改SQL查询格式,子查询如何拆分,由用户在查询里面指定。

5、适用于每个子查询都是计算量大,返回结果少的情况。(若返回结果越多,合并耗时越大)


举例

以一个统计查询需求为例(数据是构造的,木有神马泄密问题)

一个正常的查询如下:

 

查询结果

 

 

 

 

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

 

 

MTQ查询结果

 

 

 

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

  • 大小: 15.5 KB
  • 大小: 44.6 KB
  • 大小: 65.7 KB
  • 大小: 150.4 KB
  • 大小: 63.3 KB
1
0
分享到:
评论
4 楼 sea267 2012-12-29  
   楼主能否说下这个怎么用啊?!现在被这个统计问题困扰了很久!~
3 楼 babaoqi 2012-07-27  
处理思路有点云处理的样子,只不过目标机器在同一台而已,呵呵
2 楼 qiuqiu3 2012-05-29  
这是什么引擎,网络上没找到
1 楼 JetMah 2012-03-01  
这语法也太复杂了些吧?

相关推荐

    MySQL复制.pptx

    该工具的思路是在备库的SQL线程执行更新之前,先预加载相关的数据到内存中,通过多个工作线程并行读取和执行查询。这样,即使备库的SQL线程是I/O-bound,也能利用空闲的I/O能力来提升处理速度。`relayfetch`支持ROW...

    基于ssm+mysql的医院收费系统源码数据库论文.docx

    - **JAVA技术**:强大的面向对象编程语言,尤其适用于企业级应用开发,提供了丰富的库和工具,支持多线程、网络通信等功能。 6. **需求分析** - **功能需求**:包括病患信息录入与查询、费用明细计算、缴费记录...

    一个运用php与swoole实现的统计监控系统.rar

    首先,让我们深入了解PHP和Swoole的结合如何提升性能。PHP作为一种解释型语言,其执行效率相对较低,尤其是在处理网络请求和长时间运行的任务时。Swoole提供了底层的TCP、UDP、HTTP、WebSocket等网络通信协议的...

    个人收藏c#经典项目代码

    在并行编程项目中,可以看到如何利用多线程提高程序性能或实现异步操作。 8. **设计模式** 项目代码可能运用了多种设计模式,如工厂模式、单例模式、观察者模式等。设计模式是解决常见编程问题的通用解决方案,...

    java开发的QQ(第一部分:客户端和服务端)

    2. **协议设计**:QQ客户端和服务端之间需要一种约定,即通信协议,定义如何打包和解包消息,如何识别不同类型的消息,以及如何处理错误。这可能包括定义特定的报文格式,比如JSON或自定义的二进制格式。 3. **多...

    Java 开发基于Java的远程视频会议系统(系统+论文).rar

    3. **多线程**:为了处理并发用户和实时通信,系统需要有效地利用多线程。Java的线程模型允许开发者创建并管理多个执行路径,确保视频和音频流的同步。 4. **Java并发工具**:Java并发API(如`java.util.concurrent...

    VC++ C/S结构考试系统源码(包含相关程序设计文档)

    在信息技术领域,C/S(Client/Server)架构是一种常见的软件系统设计模式,它将应用程序分为客户端和服务器端两部分,客户端负责用户交互,服务器端则处理数据存储和计算。本篇文章将深入探讨如何利用VC++这一强大的...

    HappyChat聊天系统完整源码

    Java是一种跨平台的面向对象的编程语言,以其“一次编写,到处运行”的特性而受到广泛欢迎。在聊天系统中,Java提供了丰富的类库和API,如Socket编程接口,用于实现客户端与服务器之间的通信。此外,Java的并发处理...

    c++设计-学生成绩管理系统.7z

    对于性能瓶颈,可以通过优化算法、合理使用数据结构以及多线程技术提高系统的响应速度。 总之,“C++设计-学生成绩管理系统”项目涉及了C++面向对象编程、数据库操作、GUI设计、错误处理等多个方面,是对C++全面...

    东方云网数据收集系统.zip

    3. **多线程与异步编程**:为了提高数据收集效率,可采用多线程或异步操作,如Task和async/await关键字。 4. **日志记录**:通过log4net或NLog等库记录系统运行日志,便于调试和问题追踪。 5. **异常处理**:使用try...

    基于Java的企业财务管理系统管理系统

    在财务管理系统中,Java的特性如垃圾回收、多线程和丰富的类库为系统的高效运行和安全提供了保障。 2. **MVC架构**:模型-视图-控制器(Model-View-Controller)是软件设计的一种模式,主要用于分离业务逻辑、用户...

    基于VC编写的图书馆信息管理系统

    3. 多线程处理:对于耗时的操作,如大量数据的读写,可以考虑使用多线程来提高响应速度。 4. 错误处理与日志:良好的错误处理机制是系统稳定运行的关键,同时记录日志便于后期排查问题。 四、项目开发流程 1. ...

    PHP 开发PHP网络数据包分析工具的设计与开发(源代码+论文).rar

    6. 性能优化:由于数据包分析涉及大量的实时处理,开发者需要关注性能优化,如使用异步处理、多线程或多进程等技术。 附带的论文将详细阐述设计思路、实现方法以及可能遇到的技术挑战。通过阅读论文,读者不仅可以...

    工资管理系统源码.zip

    5. 多线程技术:如果系统需要进行大量的数据处理或网络通信,可能会采用多线程技术,提高程序的并发性能。 四、源码学习要点 1. MFC类库的使用:理解Dialog、CButton、CEdit等控件的用法,掌握如何通过消息映射...

    JAVA+SQL电子通讯录带系统托盘(源代码)

    Java的多线程特性可能被用来实现后台数据处理,保证用户界面的流畅性。同时,软件可能利用了Java的JNI(Java Native Interface)或JNA(Java Native Access)来与操作系统交互,实现系统托盘图标和快捷操作。 SQL...

    毕业设计 计算机专业- 基于Java的视频会议系统(程序+论文)

    “java” 标签明确了项目的技术栈,Java是一种广泛使用的面向对象的编程语言,特别适合大型企业级应用,包括网络服务和实时系统,因此它是构建视频会议系统的理想选择。 【内容详解】: 1. **Java核心技术**:本...

    游戏装备拍卖系统.rar

    游戏拍卖系统是一种常见的在线交互平台,它允许玩家在虚拟世界中买卖游戏物品,提升游戏体验。本系统采用Java编程语言进行开发,不仅适用于毕业设计和课程设计,还能够实际运行,提供了一个完整的解决方案。通过分析...

    Visual C++.NET专业项目实例开发(源代码).rar

    这些项目实例涵盖了不同的领域,可能包括图形用户界面设计、数据库交互、多线程编程、网络通信、算法实现等,为学习者提供了全面的实践平台。 源代码是理解软件开发过程的关键,通过分析这些实例,你可以学习到以下...

    XK.rar_c++学生选课_学生选课c++_学生选课系统_选课_选课系统报告

    C++的多线程技术可以确保系统在高负载下仍能稳定运行,避免因并发问题导致的数据冲突。 4. **权限控制与安全**:C++通过类和对象的设计,可以实现不同角色(如学生、教师、管理员)的权限管理,确保系统的安全性。...

    VC++数据库编程20例

    ODBC是一种标准的接口,允许应用程序通过统一的方式访问各种数据库,包括SQL Server、Oracle、MySQL等。 2. **DAO(Data Access Objects)**: DAO是Microsoft的早期数据库访问技术,适用于Access数据库。在VC++中,...

Global site tag (gtag.js) - Google Analytics