【问题标题】:How to translate slick update to SQL update & slick update a record takes more than 200ms如何将光滑更新转换为 SQL 更新和光滑更新记录需要超过 200 毫秒
【发布时间】:2014-01-13 19:27:38
【问题描述】:

这是我的精巧代码:

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))))

我发现这次更新耗时超过200ms,很不正常, 更新代码有什么问题吗? 谁能把漂亮的更新代码翻译成真正的SQL,这样我就可以检查效率了~

【问题讨论】:

    标签: scala slick


    【解决方案1】:

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

    map.updateStatement
    

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

    如果你想试试看c3p0,它与slick兼容,只需定义你的数据库如下:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-04-04
      • 1970-01-01
      • 2022-10-04
      • 1970-01-01
      • 1970-01-01
      • 2017-12-11
      • 1970-01-01
      相关资源
      最近更新 更多