为什么TOAD比我的java代码更快?

时间:2010-12-20 12:14:33

标签: java select count performance toad

我想执行一个select查询并能够获得结果的计数,而不像TOAD那样使用“COUNT(*)”。这个概念是让用户选择输入他想要的任何“选择查询”并计算他的结果数量。

try {
   selectStatement = globalConnection.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
   ResultSet selectResultSet = selectStatement.executeQuery(selectStatementString);
   selectResultSet.last();
   int countOfResults = selectResultSet.getRow();
   writeInLabel(kllStatusLabel, "Count Finished: Found " + countOfResults + " Inserts");
} catch (SQLException ex) {
   writeInLabel(kllStatusLabel, "Error executing select query.");
}

此代码延迟了很多行:“selectResultSet.last();”。 TOAD的延迟要少得多。 (右键单击 - >记录计数)。 即使我在TOAD中一直向下滚动结果表,它也会更快。

TOAD如何获得记录数?

好的,我知道了,我将使用count(*)并使用第二个ResultSet来显示我的结果。

ResultSet selectResultSet = selectStatement.executeQuery("select count(*) from (" + selectStatementString + ")");
int countOfResults = 0;
if (selectResultSet.next()){
   countOfResults = selectResultSet.getInt(1);
}

2 个答案:

答案 0 :(得分:1)

TOAD可能正在选择@@rowcount或其他一些特定于数据库的结果元数据。 如果您想要结果的大小,请明确询问数据库(使用COUNT()

如果您使用的是mysql,则可以使用ROW_COUNT()

答案 1 :(得分:0)

最好使COUNT()靠近数据库,提供一个单独的存储过程,该过程专门包含带有计数的select,并在需要时从代码中访问该存储过程。