如何将光滑的更新翻译成SQL更新&光滑更新记录需要超过200毫秒

时间:2014-01-13 10:54:59

标签: scala slick

这是我的光滑代码:

val map = Query(Messages)
                .filter(_.msg_id === msg_id)
                .map(ab => ab.completed_at ~ ab.status ~ ab.total_count ~ ab.accept_count ~ ab.fail_count ~ ab.status_list)
              map.update((Option(completed_at), Option(status), Option(sendcount), Option(acceptcount), Option(failcount), Option(task_id + ":" + "%s".format(status))))

我发现此更新需要超过200毫秒而且非常不正常, 更新代码有什么问题吗? 有人可以将光滑的更新代码翻译成真正的SQL,以便我可以检查效率〜

1 个答案:

答案 0 :(得分:1)

您应该能够使用以下命令获取查询的SQL语句:

map.updateStatement

关于查询的时间,您是否使用连接池?如果是这种情况,您可以在运行查询时看到更长的延迟,因为光滑是在每个db.withSession语句上建立连接。如果您使用连接池,它将在第一个语句上连接,然后为下一个语句重用连接(大大减少每个查询的时间)。

如果您想尝试这个,请查看c3p0,它与光滑兼容,只需按如下方式定义您的数据库:

val db = {
    val ds = new ComboPooledDataSource
    ds.setDriverClass(...)
    ds.setJdbcUrl(...)
    ds.setMinPoolSize(...)
    ds.setAcquireIncrement(...)
    ds.setMaxPoolSize(...)
    ds.setUser(...)
    ds.setPassword(...)
    Database.forDataSource(ds)
}

请查看c3p0文档,了解有关各种设置的详细信息,您可以调整这些设置以获得更好的效果。