【问题标题】:Why is TOAD faster than my java code?为什么 TOAD 比我的 java 代码快?
【发布时间】:2011-05-28 05:35:39
【问题描述】:

我想执行一个选择查询并能够获得结果的计数,而不像 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);
}

【问题讨论】:

  • 您是否考虑过 TOAD 进行顺序选择,即获取前 500 条记录并显示它们,您可以浏览时,它仍在寻找更多数据?换句话说,您是否认为 TOAD 是多线程的,除非另有说明,否则我在您的代码中看不到任何多线程?
  • 我不是在谈论结果,只是在计算结果。这就是我想说的。在 TOAD 中,即使是简单的记录计数也很快。抱歉,我没有提供所有代码。我在我的代码中使用线程。

标签: java select count performance toad


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-11-02
      • 2014-02-19
      • 2017-05-12
      • 2023-03-20
      • 2011-08-22
      • 1970-01-01
      • 2018-08-12
      • 1970-01-01
      相关资源
      最近更新 更多