Oracle查询大表的全部数据
2000w的大表
表结构如下,其中id是索引
查询处理慢的写法
List<String> queryLoidForPage(Integer startNum,Integer endNum){try {Connection oracleConnection = initBean.oracleConnection;Statement stmt = oracleConnection.createStatement();// 4.执行查询 long l = System.currentTimeMillis();ResultSet rs = stmt.executeQuery("SELECT username FROM LOID_TABLE_ID where id BETWEEN "+startNum+" and "+endNum);System.out.println("查询耗时:"+(System.currentTimeMillis()-l));List<String> loids = new ArrayList<>();// 5.处理结果集 System.out.println("开始处理结果集");long l1 = System.currentTimeMillis();while(rs.next()){loids.add(rs.getString("username"));}System.out.println("处理结果集耗时:"+(System.currentTimeMillis()-l1));return loids;}catch (Exception e){e.printStackTrace();return new ArrayList<>();}}
开始查询0到10000条数据
查询耗时:79
开始处理结果集
处理结果集耗时:35988
结束查询0到10000条数据,耗时:36101
开始查询10000到20000条数据
查询耗时:36
开始处理结果集
处理结果集耗时:35910
结束查询10000到20000条数据,耗时:35946
10000条记录查询出来到处理好要35秒左右
查询处理快的写法
List<String> queryLoidForPage(Integer startNum,Integer endNum){try {Connection oracleConnection = initBean.oracleConnection;PreparedStatement pstmt = oracleConnection.prepareStatement("SELECT username FROM LOID_TABLE_ID WHERE id BETWEEN ? AND ?");// 设置查询参数pstmt.setInt(1, startNum);pstmt.setInt(2, endNum);// 设置 fetch size 以提高查询效率 根据实际情况调整 fetch sizepstmt.setFetchSize(1000);// 4.执行查询 long l = System.currentTimeMillis();ResultSet rs = pstmt.executeQuery();System.out.println("查询耗时:"+(System.currentTimeMillis()-l));List<String> loids = new ArrayList<>();// 5.处理结果集 System.out.println("开始处理结果集");long l1 = System.currentTimeMillis();while(rs.next()){loids.add(rs.getString("username"));}System.out.println("处理结果集耗时:"+(System.currentTimeMillis()-l1));return loids;}catch (Exception e){e.printStackTrace();return new ArrayList<>();}}
开始查询0到10000条数据
查询耗时:85
开始处理结果集
处理结果集耗时:370
结束查询0到10000条数据,耗时:498
开始查询10000到20000条数据
查询耗时:37
开始处理结果集
处理结果集耗时:370
结束查询10000到20000条数据,耗时:407
开始查询20000到30000条数据
查询耗时:36
开始处理结果集
处理结果集耗时:365
结束查询20000到30000条数据,耗时:403
10000条记录查询加处理400毫秒
总结:尽量使用预处理查询,设置fetch size,即pstmt.setFetchSize(1000)