对于大数据量,并且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 block
        e.printStackTrace();
    } catch (ClassNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

public static boolean matches(String value) {
    ......
    ......
    ......

    return flag;
}

}

[quote]不好意思,我题目有点问题,match其实两个参数,一个是前台传过来的参数,是会变的,另外一个是数据库中某一列的值。[/quote]

这样的话,如果不使用存储过程,也没什么优化的余地了。

多线程筛选结果吧。

如果tb的记录数不是太多,先读取所有的记录,完成查询先。再多线程去筛选结果。

如果较多,在查询的时候就需要了。
每个线程分页查询。如先得到min(id),max(id)。。。。

用ORMapping框架不可吗,这些需求ibatis、hibernate都已解决,且成熟了。建议而已。。

matches方法本身的耗时,线程是解决不了的.匹配的算法...

嗯,很抱歉没认真读题。
就ibatis而言,它是支持编写TypeHandlerCallback的,才结果集回调里面做Matcher。而且像并发多线程、缓存等,框架都有实现。LZ可以试用下,看看效率问题有否解决。
不喜莫怪:)

我的想法
1.执行sql的优化
2.matches方法的优化
3.matches耗时间,看看matches方法里的过滤条件能否移到sql里,这样可以过滤记录,减少循环次数
4.如果还不行,你再考虑其他的办法。

楼主的意思是想根据value的结果进行筛选,你使用matches方法进行逐个筛选,效率肯定不会高。

不知道这个matches逻辑 有多复杂,
最合适的方案是将它写成一个存储过程(函数),放到数据库端,由数据库自身进行过滤。
select id, value from tb where your_proc(value) = 1

[quote]目前其实这个matches是一个人家分装好的算法,我们只能通过调用它们的api来进行比较。[/quote]
如果你不想改进的话,一条条筛选,效率是不会高的。那样只会依赖于:
1. 那个表本身的大小
2. matches API实现本身的效率

如果实在不行,你可以增加一列,为该表,把matches(value)值存储到该列。
这样,直接查询就行,速度要快很多。