Select h2数据库选择查询速度慢

Select h2数据库选择查询速度慢,select,jdbc,h2,timing,Select,Jdbc,H2,Timing,我在Java应用程序中使用h2数据库文件。在SSD上,数据库相对较小,为5M。最大的表大约有25000行(25列)。在此表上执行简单的select查询大约需要1.3秒。看起来很慢。表的ID上有一个主键。以下是测试代码: long tic = System.nanoTime(); final String sqlCmd = "select * from Transactions order by ID"; //final String sqlCmd =

我在Java应用程序中使用h2数据库文件。在SSD上,数据库相对较小,为5M。最大的表大约有25000行(25列)。在此表上执行简单的select查询大约需要1.3秒。看起来很慢。表的ID上有一个主键。以下是测试代码:

    long tic = System.nanoTime();
    final String sqlCmd = "select * from Transactions order by ID";
    //final String sqlCmd = "select ID from TRANSACTIONS order by ID";
    try (Statement statement = mConnection.createStatement();
         ResultSet resultSet = statement.executeQuery(sqlCmd)) {

    } catch (SQLException e) {
        mLogger.error("SQLException " + e.getSQLState(), e);
    }
    long toc = System.nanoTime();
    System.err.println("transactionTimingTest: " + (toc-tic)/1e6);

重复相同的select查询运行速度相当快,约为0.2秒。是否有任何方法可以改进表上select查询的第一次运行时间?

您应该澄清您试图实现的目标。您的代码需要按
ID
(这是第一次由于光盘访问而变慢)对表中的所有数据进行排序(
select*
)。在这之后,由于不获取结果集,所以您可以将其遍历掉。所以问题是,;是否需要处理所有行,是否需要按ID排序,是否需要选择所有列?如果是这样,为什么不获取结果集呢?我的目标是缩短第一次select查询的时间。我确实需要处理结果集中的每一行。我发布的代码是用于计时测试的。我知道由于磁盘访问的原因,第一次会稍微慢一点。但读取一个5M文件不应该花那么多时间。如果我计时dd命令,读取整个5M文件所需的时间不到0.05秒。在完整代码中,处理每一行,创建一个事务对象并将其添加到列表中。所有这些过程大约需要0.6秒。此外,无论是否使用“order by ID”条款,在时间上都没有区别。我认为您的最后一个评论是,您基本上观察到了连接和执行任务的延迟。如果是这样,您将使用
select*from EmptyTable
看到类似的计时。祝你好运,谢谢你的解释!