【发布时间】:2021-10-08 14:26:19
【问题描述】:
我对“ResultSet”的理解有些问题。如果我想测量执行查询所需的性能时间,我是否需要遍历Resultset --> while(rs.next()),因为实际结果集已经包含了所有结果?还是更像是一个缓冲区,在迭代 ResultSet 时会生成一些元组?
Statement b = conn.createStatement();
ResultSet rs2 = b.executeQuery("Select o_orderkey, o_orderstatus, o_orderdate, o_orderpriority, o_comment from orders");
while(rs2.next()){
int okey=rs2.getInt(1);
String st=rs2.getString(2);
Date dt=rs2.getDate(3);
String pr=rs2.getString(4);
String co=rs2.getString(5);
}
long endTime = System.currentTimeMillis();
System.out.println(i+". DuckDB " + (endTime- startTime) +" ms");
对于此示例,性能存在巨大差异。当我只测量它需要在没有 while 循环的情况下构建 ResultSet 的时间时,它只是时间的一小部分。这就是为什么我认为它可能依赖于数据库,因为 DuckDB 通过数据库进行矢量化。
我现在的问题是哪种方式是正确的,而我只想有时间回答问题?
【问题讨论】:
-
我相信,在后台,JDBC 将打开一个数据库游标,然后在您处理它时迭代结果集。
-
好的,这意味着您认为实际上需要滚动浏览 ResulSet。我没听错吗?
-
或多或少,是的,整个结果集不会立即进入 Java。