В следующих тестах производительности многих запросов этот синхронизированный код JDBC занимает 500-600 мс:
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 является Предлагаемый обходной путь.