`
中华国锋
  • 浏览: 43877 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

多线程执行 sql查询 提升整体查询效率

 
阅读更多

对于复杂的业务sql查询,可以考虑如下建议。


1.先通过sql查询出主表信息列表list.
2.for循环list,补充查询主表对应的子表信息。
3.在2的步骤中,可以使用多线程处理for查询。



可以参考如下:

其中conList 是查询主表返回的list

//线程池初始化
ThreadPoolExecutor executor = ThreadPool.getThreadPool(5,8, 3000, TimeUnit.SECONDS, new LinkedBlockingQueue<Runnable>(2000));
//得到线程池中线程队列
LinkedBlockingQueue<Runnable> queue = (LinkedBlockingQueue<Runnable>) executor.getQueue();
int countTool= conList.size();
final CountDownLatch countDownLatch = new CountDownLatch(countTool);
for(int i=0;i < countTool;i++){
final Map tempMap = (Map) conList.get(i);
String contractNo = (String) tempMap.get("CONTRACTNO");
String workflowId = (String) tempMap.get("WORKFLOWID");
params.put("WORKFLOWID", workflowId); //工作流
final IbatisDao dao=new IbaitsDaoImpl();
//防止 params 被重复引用 需要重新 new 对象 并使用该new 对象
final Map myParam = new HashMap();
myParam.putAll(params);

//向线程池 放入待处理的任务信息 使用内部类进行 查询
executor.execute(new Runnable(){
public void run() {
//统计审核次数
try {
Map auditMap = (Map) dao.queryObjectBySql("QUERY_AUDIT_NUM_BY_WORKFLOWID",myParam);
tempMap.put("AUDITNAME",auditMap.get("AUDITNAME"));
tempMap.put("AUDITNUM",auditMap.get("AUDITNUM"));
//查询审核时间
auditMap = (Map) dao.queryObjectBySql("QUERY_AUDIT_TIME_BY_WORKFLOWID",myParam);
tempMap.put("AUDITTIME",auditMap.get("AUDITTIME"));
} catch (SQLException e) {
e.printStackTrace();
}
//线程计数器 减 1
countDownLatch.countDown();
}

});
}
//所有子线程 执行完成之后 主线程再继续向下
countDownLatch.await();
System.out.println("-------------query end------");
?
分享到:
评论

相关推荐

    navicat for mysql执行sql脚本细节

    ### Navicat for MySQL执行SQL脚本细节 #### 一、引言 在数据库管理和开发过程中,使用图形化工具能够极大地提升工作效率。Navicat for MySQL作为一款强大的MySQL图形化管理工具,在执行SQL脚本方面提供了丰富的...

    易语言多线程数据库查询对比

    在编程领域,多线程是提高程序执行效率的重要技术之一,尤其在处理大量数据或进行耗时操作如数据库查询时。易语言,一种简洁而直观的中文编程语言,提供了实现多线程的能力,使得开发者可以同时执行多个任务,提高...

    易语言多线程同时查询同一数据库

    在本案例中,多线程被用来同时查询同一数据库,这有助于减少整体查询时间,特别是当数据库包含大量数据时。 接下来,我们关注如何在易语言中创建和管理线程。易语言提供了`创建线程`、`等待线程`、`结束线程`等指令...

    Powerbuilder中实现多线程同步查询数据 源程序

    2. **线程函数**:每个线程执行的函数,包含数据库连接、SQL查询、结果处理和同步操作。 3. **同步点**:在关键操作(如数据写入或共享资源访问)前后设置同步点,确保线程安全。 4. **结果合并**:所有线程完成后,...

    Java操作Oracle数据库-多线程.rar

    2. **Oracle数据库操作**:一旦建立了连接,我们可以通过`Statement`或`PreparedStatement`对象来执行SQL语句,包括查询、插入、更新和删除数据。在本示例中,还涉及到调用Oracle数据库中的函数和存储过程,这通常...

    python 多线程串行和并行的实例

    这使得多线程非常适合于I/O密集型任务,比如读写文件、网络请求等,在等待I/O操作完成的过程中,其他线程仍然可以继续执行,从而提高整体的程序执行效率。 ##### 1.2 Python中的多线程 Python中的多线程可以通过`...

    多线程模型

    数据库(DB)读取通常涉及SQL查询,多线程模型可以让我们并行执行这些查询,提高整体性能。例如,如果需要从数据库中获取多个表的数据,每个线程可以负责一个或多个表的查询,这样就避免了单一线程串行执行时的等待...

    .NET 史上 最强性能,功能的SQLSERVER 操作类库源代码

    这个类库可能包含了优化的数据库连接管理、查询执行、事务处理等核心功能,旨在提高.NET应用程序与SQL Server之间的交互效率。 描述中提到的“基于线程安全的对象池”是一个重要的设计模式,它在多线程环境中确保了...

    提高SQL Server查询速度的方法.pdf

    - **批处理和多线程**:通过批量提交SQL语句或者利用多线程并行执行查询,可以充分利用硬件资源,减少网络通信开销,从而提升查询速度。 - **异步执行**:对于耗时较长的操作,采用异步模式,可以避免阻塞主线程,...

    java多线程实现大批量数据导入源码

    使用预编译的`PreparedStatement`可以更有效地执行SQL,避免SQL注入,并提高性能。批量插入数据时,可以使用`addBatch()`和`executeBatch()`方法,以减少与数据库交互的次数。 对于数据导出,可能是读取数据库数据...

    多线程MySQL数据库源代码

    8. **异步I/O**:MySQL的C API提供了异步操作的能力,这在多线程环境中特别有用,因为它允许线程在等待数据库响应时执行其他任务,提高了系统整体效率。 在`ThreadOdbc`示例代码中,我们可能会看到如何创建和管理...

    使用线程快速检测SQL连接的Delphi源码

    在给定的"使用线程快速检测SQL连接的Delphi源码"中,我们聚焦于如何利用多线程技术来提高SQL数据库连接的检测效率。Delphi是一种基于Object Pascal语言的集成开发环境(IDE),它以其强大的Windows应用程序开发能力...

    SQL Server 2008查询性能优化 源代码

    在SQL Server 2008中,查询性能优化是一项至关重要的任务,因为它直接影响到数据库系统的响应速度和整体效率。"SQL Server 2008查询性能优化源代码"这一资源提供了一种深入学习和实践的方法,帮助我们理解并提升SQL...

    sql 查询慢的48个原因分析.rar

    当SQL查询执行缓慢时,这可能意味着资源浪费、用户体验下降以及整体系统效率降低。本压缩包文件"sql 查询慢的48个原因分析.doc"提供了对这一问题的深入探讨,旨在帮助用户识别并解决SQL查询速度减慢的各种因素。以下...

    多线程网站后台扫描工具

    多线程是程序设计中的一个重要概念,特别是在处理大量并发任务时,它可以使得多个任务同时执行,从而提高整体性能。 在描述中提到的“后台管理扫描器”,是指该工具专注于探测网站的后台管理系统,这些系统通常包含...

    c#实现用SQL池,多线程定时批量执行SQL语句的方法

    好,下面我就为大家介绍一种方法:构建SQL池,分离业务逻辑层和数据访问层,让业务逻辑层从低效的数据库操作解脱,以提高系统整体性能。 (一)SQL池 SQL池是SQL容器,用于存放业务逻辑层抛过来的SQL语句。SQL池主要...

    多线程delphi 源码 数据库

    2. **异步数据库访问**:线程可以异步地执行SQL查询,避免阻塞主线程,提高程序响应性。 3. **线程安全的数据访问**:当多个线程同时访问数据库时,必须确保所有数据库操作都是线程安全的,防止竞态条件和死锁。 4...

    计算机软件-商业源码-具有多线程的数据库备份程序 for SQL Server.zip

    多线程技术是并发处理的关键,它允许多个任务同时执行,从而提升整体性能。在数据库备份过程中,多线程可以显著加速备份进程,尤其是在面对大规模数据时。这款商业源码通过创建并行备份任务,使得多个数据库表或索引...

    多线程数据采集器源码(C# )

    通过创建多个线程,数据采集器可以并行处理多个任务,提高整体工作效率。 二、数据采集框架 数据采集通常涉及HTTP请求、HTML解析、数据提取和存储等步骤。在C#中,可以使用`System.Net.Http`库发送HTTP请求,如`...

Global site tag (gtag.js) - Google Analytics