JDBC获取SQL查询语句返回记录数的三种方式效率比较
2009-10-29 20:35
676 查看
版权声明
:转载时请以超链接形式标明文章原始出处和作者信息及本声明
http://huahuazhu.blogbus.com/logs/22174599.html
测试代码:
//================================================================================================
//公用代码
Connection cn = DBManager.getConn("jdbc:oracle:thin:u/p@dbs:1521:orcl");
String selectSQL = "SELECT COL1 FROM TB1";
//各方式代码……
DBManager.closeConn(cn);
//================================================================================================
//方式一:利用ResultSet的getRow方法
Statement stmt = cn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE);
ResultSet rs = stmt.executeQuery(selectSQL);
rs.last();
logger.info("利用ResultSet的getRow方法:" + rs.getRow());
rs.close();
stmt.close();
//================================================================================================
//方式二:自行迭代方式
Statement stmt = cn.createStatement();
ResultSet rs = stmt.executeQuery(selectSQL);
int i = -1;
while (rs.next()) {
i++;
}
logger.info("自行迭代方式:" + i);
rs.close();
stmt.close();
//================================================================================================
//方式三:SELECT COUNT(*) FROM (SQL)方式
String newSQL = "SELECT COUNT(1) AS CT FROM (" + selectSQL + ")";
Statement stmt = cn.createStatement();
ResultSet rs = stmt.executeQuery(newSQL);
rs.next();
logger.info("SELECT COUNT(*) AS CT FROM (SQL)方式:" + rs.getInt(1));
rs.close();
stmt.close();
//================================================================================================
以下是对 7000 条数据的测试结果
1,利用ResultSet的getRow方法
<耗时>:906(ms)。
<耗时>:860(ms)。
<耗时>:781(ms)。
<耗时>:766(ms)。
<耗时>:797(ms)。
2,自行迭代方式
<耗时>:672(ms)。
<耗时>:688(ms)。
<耗时>:672(ms)。
<耗时>:687(ms)。
<耗时>:688(ms)。
3,SELECT COUNT(*) AS CT FROM (SQL)方式
<耗时>:500(ms)。
<耗时>:484(ms)。
<耗时>:500(ms)。
<耗时>:484(ms)。
<耗时>:500(ms)。
总体上看,三种方式貌视差不大,相互间仅100、200ms的差别。
从测试结果看,第三种方式效率最高,自行迭代次之,ResultSet的getRow方法效率最低。
由此看来,要获取 一条SQL查询语句返回的记录数,单执行一条SQL去获取要比通过ResultSet对象获取来得实惠。
:转载时请以超链接形式标明文章原始出处和作者信息及本声明
http://huahuazhu.blogbus.com/logs/22174599.html
测试代码:
//================================================================================================
//公用代码
Connection cn = DBManager.getConn("jdbc:oracle:thin:u/p@dbs:1521:orcl");
String selectSQL = "SELECT COL1 FROM TB1";
//各方式代码……
DBManager.closeConn(cn);
//================================================================================================
//方式一:利用ResultSet的getRow方法
Statement stmt = cn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE);
ResultSet rs = stmt.executeQuery(selectSQL);
rs.last();
logger.info("利用ResultSet的getRow方法:" + rs.getRow());
rs.close();
stmt.close();
//================================================================================================
//方式二:自行迭代方式
Statement stmt = cn.createStatement();
ResultSet rs = stmt.executeQuery(selectSQL);
int i = -1;
while (rs.next()) {
i++;
}
logger.info("自行迭代方式:" + i);
rs.close();
stmt.close();
//================================================================================================
//方式三:SELECT COUNT(*) FROM (SQL)方式
String newSQL = "SELECT COUNT(1) AS CT FROM (" + selectSQL + ")";
Statement stmt = cn.createStatement();
ResultSet rs = stmt.executeQuery(newSQL);
rs.next();
logger.info("SELECT COUNT(*) AS CT FROM (SQL)方式:" + rs.getInt(1));
rs.close();
stmt.close();
//================================================================================================
以下是对 7000 条数据的测试结果
1,利用ResultSet的getRow方法
<耗时>:906(ms)。
<耗时>:860(ms)。
<耗时>:781(ms)。
<耗时>:766(ms)。
<耗时>:797(ms)。
2,自行迭代方式
<耗时>:672(ms)。
<耗时>:688(ms)。
<耗时>:672(ms)。
<耗时>:687(ms)。
<耗时>:688(ms)。
3,SELECT COUNT(*) AS CT FROM (SQL)方式
<耗时>:500(ms)。
<耗时>:484(ms)。
<耗时>:500(ms)。
<耗时>:484(ms)。
<耗时>:500(ms)。
总体上看,三种方式貌视差不大,相互间仅100、200ms的差别。
从测试结果看,第三种方式效率最高,自行迭代次之,ResultSet的getRow方法效率最低。
由此看来,要获取 一条SQL查询语句返回的记录数,单执行一条SQL去获取要比通过ResultSet对象获取来得实惠。
相关文章推荐
- JDBC获取SQL查询语句返回记录数的三种方式效率比较
- 如何使你的Sql 语句可以和null 值比较得到正确的结果,而不是永远都返回0条记录
- oracle 查询当天记录 三种方法效率比较
- Redis查询&JDBC查询&Hibernate查询方式的效率比较...
- java的list几种实现方式的效率(ArrayList、LinkedList、Vector、Stack),以及 java时间戳的三种获取方式比较
- SQL获取插入后数据ID的三种方式比较
- java的list几种实现方式的效率(ArrayList、LinkedList、Vector、Stack),以及 java时间戳的三种获取方式比较
- java jdbc调用oracle的函数或过程返回SQL语句查询的结果集
- 金蝶KPGETSQL SQL查询语句返回空记录如何解决
- 如何用SQL查询语句获取Oracle表 树形结构的记录(PL/SQL )
- 笔记-Oracle数据库sql语句查询,rownum只能使用<=的比较方式
- Hibernate SQLQuery查询返回空List,在mysql命令下直接执行sql语句可以正常得到记录
- 10万数据量的数据库查询效率比较 纯sql语句 和 view 视图
- 记录一次条件比较多的SQL查询语句
- 在SQL语句中查询多条记录并把多条记录同一字段的值连接成一个字符并返回的写法
- hibernate中的query查询原生sql语句,如何获得返回记录中的每一个字段的值
- Oracle_查询当天记录 三种方法效率比较
- Hibernate学习-07:CRUD(增删改查)操作之查询多条/所有记录HQL、QBC、SQL三种方式
- sql语句的优化分析之一查询语句中左连接和函数效率分析比较
- 查询及删除重复记录的SQL语句