Postgresql 圆滑的查询非常慢

Postgresql 圆滑的查询非常慢,postgresql,scala,slick,Postgresql,Scala,Slick,我正在努力学习Slick,并且已经建立并运行了一个Postgres数据库。我制作了一个小程序来测试它,如下所示: import scala.slick.driver.PostgresDriver.simple._ import Database.threadLocalSession object Names extends Table[(String)]("names") { def name = column[String]("name", O.PrimaryKey)

我正在努力学习Slick,并且已经建立并运行了一个Postgres数据库。我制作了一个小程序来测试它,如下所示:

import scala.slick.driver.PostgresDriver.simple._
import Database.threadLocalSession

object Names extends Table[(String)]("names")     
{
    def name = column[String]("name", O.PrimaryKey)
    def * = name
}

object DbTest
{
    val db = Database.forURL("jdbc:postgresql://localhost:5432/names", 
                              driver = "org.postgresql.Driver")

    def main(args : Array[String]) =
    {
        print("Doing something... ")

        db withTransaction 
        {
            Query(Names) foreach 
            { 
                case (name) =>
                    println(name)
            }
        }
        println("... done!")
    }
}

问题是,在
打印(“做某事…”)
之后,发生任何事情都需要大约5秒钟的时间。如果我用transaction复制
db
块,则在前5秒之后,两个块都会快速连续执行。有什么想法吗?

我不确定我是否知道具体的问题,但是在您的代码示例中,有一些东西可能会影响性能

1) 确保您正在使用。使用Slick构建查询时会有相当大的开销,您不希望在每个查询中重复这些开销

2) 您也不应该在实际代码中使用threadLocalSession(请参阅线程)。它应该像下面这样

3) 使用像这样的连接池

例如:

val pool = // some connection pool like C3P0 or other

Database.forDataSource(pool).withSession { implicit session: Session =>
  ...
}

从命令行连接到postgres需要多长时间?因为我看不到任何需要那么长时间的东西。它几乎是瞬间的!查询返回了多少行?只有一行“John Doe”。好的,还有两个问题,您使用的是什么版本的slick、scala和postgresql驱动程序?如果您在linux上,您是否可以尝试使用url jdbc:postgresql:names而不是jdbc:p进行连接ostgresql://localhost:5432/names? 我不确定这是否也适用于Windows。现在我到家了,我可以尝试一下了,您的代码对我来说只需要几秒钟的时间就可以使用scala 2.10.2和slick 1.0.1。