【发布时间】:2013-09-10 00:32:15
【问题描述】:
我使用的是 derby embed 版本,有一个包含 100,000 条记录的表,当我使用 PreparedStatement 查询时,查询速度很快,只需 200 毫秒。 但问题是当我从 ResultSet 中获取数据时,速度很慢,大约需要 1500 毫秒,但结果集中只有 7 条记录。 前 7 条记录很快,我认为当所有 7 条记录都已完全获取时它应该打破循环,但事实并非如此,“resultset.next()”的最后一次执行需要超过 1400 毫秒。 另一方面,我改用Statement而不是PreparedStatement,当所有7条记录都取出后,循环立即中断,加上查询时间,都不到200ms。我想不通找出原因。
【问题讨论】:
-
不要猜测,使用分析器找出它大部分时间都花在哪里。顺便说一句,在 Derby 的情况下,我发现自己经常处于 Derby 的 PreparedStatements 根本无法提高性能的情况。
-
我不知道这是否有帮助,但也许。准备好的语句需要多次往返数据库。首先,准备语句,然后为每个绑定参数执行一次,最后执行一次执行调用。在没有参数永远绑定的情况下,有时常规语句会稍微快一些。例如,“select sysdate from dual”,准备好的语句不会有帮助,并且可能会更慢(尽管我们在这里讨论的是纳秒)。
标签: java sql jdbc resultset derby