首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > 其他数据库 >

JDBC获取 SQL查询话语返回记录数 的三种方式效率比较

2012-10-25 
JDBC获取 SQL查询语句返回记录数 的三种方式效率比较JDBC获取 SQL查询语句返回记录数 的三种方式效率比较2

JDBC获取 SQL查询语句返回记录数 的三种方式效率比较
JDBC获取 SQL查询语句返回记录数 的三种方式效率比较
2008年06月01日 星期日 下午 05:07
测试代码:

//==================================================//公用代码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(1) 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(1) AS CT FROM (SQL)方式

<耗时>:500(ms)。
<耗时>:484(ms)。
<耗时>:500(ms)。
<耗时>:484(ms)。
<耗时>:500(ms)。

总体上看,三种方式貌视差不大,相互间仅100、200ms的差别。

从测试结果看,第三种方式效率最高,自行迭代次之,ResultSet的getRow方法效率最低。

由此看来,要获取 一条SQL查询语句返回的记录数,单执行一条SQL去获取要比通过ResultSet对象获取来得实惠。

热点排行