`
中华国锋
  • 浏览: 40943 次
  • 性别: 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------");
?
分享到:
评论

相关推荐

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

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

    【最新版】navicatess150_premium_en.dmg navicat-premium-essentials: 15.0.14【亲测可用】最好的数据

    我们设计了一种全新的机制并应用了多线程,因此您可以并行运行某些任务以提高数据库开发的整体效率。 管理本地和云数据库,例如Amazon RDS,Amazon Aurora,Amazon Redshift,Microsoft Azure,Oracle Cloud,Google...

    XX系统方案设计.doc

    NET平台提供大量的服务,包括垃圾自动收集、面向对象的多线程、基于程序集的部署、 异常处理、特性编程、远程处理、ASP.NET网页框架、互操作、安全性等,使开发人员可 以快速构架任何企业级应用及解决方案,从包括...

    【最新版】navicatess150_premium_en.dmg【亲测可用】最好的数据库开发工具

    我们设计了一种全新的机制并应用了多线程,因此您可以并行运行某些任务以提高数据库开发的整体效率。 云数据库导航 管理本地和云数据库,例如Amazon RDS,Amazon Aurora,Amazon Redshift,Microsoft Azure,...

    mysql数据库my.cnf配置文件

    注意:该参数值设置的过大反而会是服务器整体效率降低 ft_min_word_len = 4 # 分词词汇最小长度,默认4 transaction_isolation = REPEATABLE-READ # MySQL支持4种事务隔离级别,他们分别是: # READ-UNCOMMITTED, ...

    构建最高可用Oracle数据库系统 Oracle 11gR2 RAC管理、维护与性能优化

    15.2.5提高内存的访问效率 15.3 RAC Database 15.3.1 Oracle版本 15.3.2数据表空间的调整 15.3.3 DML语句性能调整 15.3.4临时表空间的调整 15.3.5日志文件的调整 15.3.6 UNDO表空间的调整 15.4应用系统 ...

    超级有影响力霸气的Java面试题大全文档

    与cgi的区别在于servlet处于服务器进程中,它通过多线程方式运行其service方法,一个实例可以服务于多个请求,并且其实例一般不会销毁,而CGI对每个请求都产生新的进程,服务完成后就销毁,所以效率上低于servlet。...

    java 面试题 总结

    与cgi的区别在于servlet处于服务器进程中,它通过多线程方式运行其service方法,一个实例可以服务于多个请求,并且其实例一般不会销毁,而CGI对每个请求都产生新的进程,服务完成后就销毁,所以效率上低于servlet。...

    基于J2EE框架的个人博客系统项目毕业设计论文(源码和论文)

    Java的产生与流行是当今Internet发展的客观要求,Java是一门各方面性能都很好的编程语言,它的基本特点是简单、面向对象、分布式、解释的、健壮的、安全的、结构中立的、可移植的、性能很优异的、多线程的、动态的,...

    asp.net知识库

    在 SQL Server 2005 中查询表结构及索引 sql server 2005中的DDL触发器 在 SQL Server 2005 中使用表值函数来实现空间数据库 SQL Server 2005的30个最重要特点 同时安装sql2000和sql2005的经验 类如何与界面绑定 在...

    基于J2EE框架的个人博客系统项目毕业设计论...

    Java的产生与流行是当今Internet发展的客观要求,Java是一门各方面性能都很好的编程语言,它的基本特点是简单、面向对象、分布式、解释的、健壮的、安全的、结构中立的、可移植的、性能很优异的、多线程的、动态的,...

    二十三种设计模式【PDF版】

    主要是介绍各种格式流行的软件设计模式,对于程序员的进一步提升起推进作用,有时间可以随便翻翻~~ 23种设计模式汇集 如果你还不了解设计模式是什么的话? 那就先看设计模式引言 ! 学习 GoF 设计模式的重要性 ...

Global site tag (gtag.js) - Google Analytics