【发布时间】:2016-06-22 21:39:29
【问题描述】:
我运行选择的 scala 代码比在 MySQL Workbench 上发出相同查询慢一个数量级。与 MySQL Workbench 中的相同查询相比,我的调试打印 connection made 和 query returned 之间的时间非常长,所有其他步骤都很快。当然,我在这两种情况下都使用相同的数据库用户。
import java.sql.{Connection,DriverManager,ResultSet}
object JavaSQL extends App {
val driver = "com.mysql.jdbc.Driver"
val url = ..
val user = ..
val password = ..
println("loading driver")
Class.forName(driver) // loads the driver
println("driver loaded")
val connection = DriverManager.getConnection(url, user, password)
println("connection made")
val rs: ResultSet = connection.createStatement.executeQuery("SELECT * from Foo")
println("query returned")
connection.close
}
build.sbt:
lazy val project = (project in file("."))
.settings(
scalaVersion := "2.11.7",
libraryDependencies ++= Seq("mysql" % "mysql-connector-java" % "5.1.38")
)
我应该怎么做才能达到标准?它与在 mysql 的命令行中运行相同的查询一样慢。 Workbench 必须使用一些特殊的标志。
我使用 JDBC/SQL 抽象已经有一段时间了,现在回到 java.sql,所以请温柔..
【问题讨论】:
-
您是否在计算与数据库建立连接所需的时间?此外,JVM 预热。
-
对不起,我现在已经在问题中澄清了。我认为答案是否定的。除了我描述的那一步之外,一切都很快。
-
如果您比较只返回一行而不是返回多行的查询的性能,例如
SELECT COUNT(*) AS n FROM Foo,这有什么不同吗? -
问题解决了,见下文,谢谢!
-
实际上,执行查询会很好,这样使用它的代码就不会等待整个表流过……但这与原始主题有点不同。