`
丁林.tb
  • 浏览: 792422 次
  • 性别: 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. **多...

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

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

    HappyChat聊天系统完整源码

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

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

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

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

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

    游戏装备拍卖系统.rar

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

    VC++数据库编程20例

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

    vc学生管理系统(MFC下实现)

    MFC是微软提供的一种C++类库,它为Windows应用程序的开发提供了丰富的接口和功能,简化了窗口、菜单、对话框等界面元素的创建。通过MFC,开发者可以快速构建用户界面,并实现与操作系统底层的交互。 该“vc学生管理...

    C++ 职工管理系统.zip

    C++是一种强大的面向对象编程语言,它提供了丰富的库支持,如STL(Standard Template Library)和MFC(Microsoft Foundation Classes),为开发复杂系统提供了便利。在职工管理系统中,C++的主要应用体现在以下几个...

    北邮-分布式温控系统.zip

    分布式温控系统是一种高效、灵活的温度控制方案,尤其适用于大型建筑或数据中心等环境,能够实现多区域的独立控制和整体协调。在这个“北邮-分布式温控系统”项目中,我们看到一个由QT实现的实例,这为学生提供了...

    VC酒店管理系统(完整、没错误)

    VC++是微软公司推出的一种集成开发环境,用于编写使用C++语言的Windows应用程序。它集成了编译器、调试器和其他工具,方便开发者进行高效编程。在酒店管理系统中,VC++的优势在于其强大的图形用户界面(GUI)设计...

    客户资源管理系统C++源代码

    4. 多线程支持:使用std::thread实现并发处理,提高系统性能。 5. 文件I/O操作:读写数据库或配置文件,使用fstream库进行文件操作。 五、学习与实践 理解并掌握这个C++源代码,对于学习者来说,不仅可以提升C++...

    学生基本信息管理系统

    7. **多线程**:如果系统需要并行处理任务,如批量数据导入或并发查询,C++的多线程支持可以帮助提升性能。 总的来说,“学生基本信息管理系统”是一个综合运用了C++编程语言、面向对象设计、数据库技术、图形用户...

    微软c#程序源代码全集

    5. **LINQ**:C#中的语言集成查询,提供了一种简洁的查询数据的方式,支持数据库操作和集合操作。 6. **事件和委托**:事件用于在对象之间进行通信,委托是类型安全的函数指针,可以将多个方法连接到同一事件。 7....

    大规模实时数据流一体化处理、转发和存储方法及系统与流程.docx

    本发明引入监听机制,仅关注活跃连接,并利用线程池技术,预创建工作线程,降低新连接建立时的性能影响,提高系统整体性能。 通过这些技术创新,本发明提供了一种大规模实时数据流的一体化处理、转发和存储方案,...

    学生信息管理系统JAVA+SQL

    本文将详细介绍一个利用JAVA编程语言与SQL数据库技术构建的学生信息管理系统,旨在帮助读者理解如何将这两种技术有效地结合,实现高效的数据存储和处理。 首先,JAVA作为一款跨平台的面向对象编程语言,因其强大的...

Global site tag (gtag.js) - Google Analytics