在以下许多查询的性能测试中,这段定时的 JDBC 代码需要 500-600ms:
val ids = queryNA[String]("select id from account limit 1000").list
val stmt = session.conn.prepareStatement("select * from account where id = ?")
debug.time() {
for (id <- ids) {
stmt.setString(1, id)
stmt.executeQuery().next()
}
}
但是,当使用 ScalaQuery 时,时间会超过 2 秒:
val ids = queryNA[String]("select id from account limit 1000").list
implicit val gr = GetResult(r => ())
val q = query[String,Unit]("select * from account where id = ?")
debug.time() {
for (id <- ids) {
q.first(id)
}
}
在使用服务器日志进行调试后,事实证明这是由于 PreparedStatements 被重复准备而不是重复使用的事实。
这实际上是我们在应用程序代码中遇到的性能问题,所以我们想知道我们是否遗漏了有关如何在 ScalaQuery 中正确重用准备好的语句,或者是否建议使用 JDBC 解决方法。