对于大数据量,并且matchs方法耗时,如何提升以下代码执行速度?多线程?还是?

问题描述

public class Test {public static void main(String[] args) {ResultSet results = null;List<Integer> ids = new ArrayList<Integer>();String querySQL = "select id, value from tb";try {Class.forName("com.mysql.jdbc.Driver").newInstance();Connection con = java.sql.DriverManager.getConnection("jdbc:mysql://localhost/demo?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull","root", "root");results = con.createStatement().executeQuery(querySQL);String value;while (results.next()) {value = results.getString("value");if (matches(value)) {ids.add(results.getInt("id"));}}con.close();} catch (SQLException e) {e.printStackTrace();} catch (InstantiationException e) {e.printStackTrace();} catch (IllegalAccessException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (ClassNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();}}public static boolean matches(String value) {...... ............return flag;}} 问题补充:shansun123 写道

解决方案

引用不好意思,我题目有点问题,match其实两个参数,一个是前台传过来的参数,是会变的,另外一个是数据库中某一列的值。这样的话,如果不使用存储过程,也没什么优化的余地了。
解决方案二:
引用目前其实这个matches是一个人家分装好的算法,我们只能通过调用它们的api来进行比较。如果你不想改进的话,一条条筛选,效率是不会高的。那样只会依赖于:1. 那个表本身的大小2. matches API实现本身的效率如果实在不行,你可以增加一列,为该表,把matches(value)值存储到该列。这样,直接查询就行,速度要快很多。
解决方案三:
楼主的意思是想根据value的结果进行筛选,你使用matches方法进行逐个筛选,效率肯定不会高。不知道这个matches逻辑 有多复杂,最合适的方案是将它写成一个存储过程(函数),放到数据库端,由数据库自身进行过滤。select id, value from tb where your_proc(value) = 1
解决方案四:
我的想法1.执行sql的优化2.matches方法的优化3.matches耗时间,看看matches方法里的过滤条件能否移到sql里,这样可以过滤记录,减少循环次数4.如果还不行,你再考虑其他的办法。
解决方案五:
嗯,很抱歉没认真读题。就ibatis而言,它是支持编写TypeHandlerCallback的,才结果集回调里面做Matcher。而且像并发多线程、缓存等,框架都有实现。LZ可以试用下,看看效率问题有否解决。不喜莫怪:)
解决方案六:
matches方法本身的耗时,线程是解决不了的.匹配的算法...-
解决方案七:
用ORMapping框架不可吗,这些需求ibatis、hibernate都已解决,且成熟了。建议而已。。
解决方案八:
多线程筛选结果吧。---如果tb的记录数不是太多,先读取所有的记录,完成查询先。再多线程去筛选结果。如果较多,在查询的时候就需要了。每个线程分页查询。如先得到min(id),max(id)。。。。

时间: 2024-11-03 21:40:23

对于大数据量,并且matchs方法耗时,如何提升以下代码执行速度?多线程?还是?的相关文章

MySQL 大数据量快速插入方法和语句优化

MySQL大数据量快速插入方法和语句优化是本文我们主要要介绍的内容,接下来我们就来一一介绍,希望能够让您有所收获! 一.INSERT语句的速度 插入一个记录需要的时间由下列因素组成,其中的数字表示大约比例: 连接:(3) 发送查询给服务器:(2) 分析查询:(2) 插入记录:(1x记录大小) 插入索引:(1x索引) 关闭:(1) 这不考虑打开表的初始开销,每个并发运行的查询打开. 表的大小以logN (B树)的速度减慢索引的插入. 加快插入的一些方法 如果同时从同一个客户端插入很多行,使用含多个

MySQL大数据量导入导出方法比较

硬件: Intel(R) Xeon(R) CPU 5130 @ 2.00GHz * 2, 4G RAM, 564G SAS 软件: Red Hat Enterprise Linux AS release 4 (Nahant Update 4) 2.6.9 42.ELsmp (32-bit), MySQL 5.0.27-standard-log 总记录数: 1016126, 每行平均大小 46822 1. 导出测试 1.1 导出成文本 方法: SELECT * INTO OUTFILE '/bac

mysql limit大数据量分页优化方法

Mysql的优化是非常重要的.其他最常用也最需要优化的就是limit.Mysql的limit给分页带来了极大的方便,但数据量一大的时候,limit的性能就急剧下降. 同样是取10条数据 select * from yanxue8_visit limit 10000,10 和 select * from yanxue8_visit limit 0,10 就不是一个数量级别的. 网上也很多关于limit的五条优化准则,都是翻译自Mysql手册,虽然正确但不实用.今天发现一篇文章写了些关于limit优

mysql limit 大数据量分页优化方法

Mysql的优化是非常重要的.其他最常用也最需要优化的就是limit.Mysql的limit给分页带来了极大的方便,但数据量一大的时候,limit的性能就急剧下降. 同样是取10条数据 select * from yanxue8_visit limit 10000,10 和 select * from yanxue8_visit limit 0,10 就不是一个数量级别的. 网上也很多关于limit的五条优化准则,都是翻译自Mysql手册,虽然正确但不实用.今天发现一篇文章写了些关于limit优

MySQL 大数据量快速插入方法和语句优化分享_Mysql

锁定也将降低多连接测试的整体时间,尽管因为它们等候锁定最大等待时间将上升.例如: 复制代码 代码如下: Connection 1 does 1000 inserts Connections 2, 3, and 4 do 1 insert Connection 5 does 1000 inserts 如果不使用锁定,2.3和4将在1和5前完成.如果使用锁定,2.3和4将可能不在1或5前完成,但是整体时间应该快大约40%. INSERT.UPDATE和DELETE操作在MySQL中是很快的,通过为在

MySQL大数据量时提高分页效率

我的这段代码是大数据量时提高分页的效率的测试代码 --提高分页效率:实现分页时只读取显示数据,需要先在数据库创建数据库"TestForPaging" use TestForPaging go --创建表SomeData create table SomeData ( id int primary key, name varchar(30) null, description text ) go --插入数据 insert into SomeData values(1,'num1','第

Mysql大数据量的导出导入方法比较

硬件: Intel(R) Xeon(R) CPU 5130 @ 2.00GHz * 2, 4G RAM, 564G SAS 软件: Red Hat Enterprise Linux AS release 4 (Nahant Update 4) 2.6.9 42.ELsmp (32-bit), MySQL 5.0.27-standard-log 总记录数: 1016126, 每行平均大小 46822 1. 导出测试1.1 导出成文本 方法: SELECT * INTO OUTFILE '/back

大数据量下MySQL插入方法的性能比较

文章讲的是大数据量下MySQL插入方法的性能比较,不管是日常业务数据处理中,还是数据库的导入导出,都可能遇到需要处理大量数据的插入.插入的方式和数据库引擎都会对插入速度造成影响,本文旨在从理论和实践上对各种方法进行分析和比较,方便以后应用中插入方法的选择. 插入分析 MySQL中插入一个记录需要的时间由下列因素组成,其中的数字表示大约比例: ·连接:(3) ·发送查询给服务器:(2) ·分析查询:(2) ·插入记录:(1x记录大小) ·插入索引:(1x索引) ·关闭:(1) 如果我们每插入一条都

求mysql 大数据量问题解决方法?

问题描述 求mysql 大数据量问题解决方法? 一个mysql的数据表(大概有50000+)的数据,其中有一个字段的类型是blob的,存着相当大的二进制数据(大概有50k以上),有时候检索某个字段或者只是查询某个总共有几条数据就要相当长的时间,求有什么办法解决吗? 解决方案 把你经常需要查询的字段建立索引. 解决方案二: blob放在服务器上,然后用mysql记录它存放在服务器的地址.每次查就是根据地址来服务器取数据 解决方案三: MySQL数据库如何解决大数据量存储问题关于mysql大数据量分