【发布时间】:2019-03-25 10:56:15
【问题描述】:
我在 Sql Server 上有一个中等大小的表,大约 4000 万行。 特别是这个表有一个可能很大的 xml 列。
我在使用 last version of mssql-jdbc 从该表中检索数据时遇到了非常糟糕的性能。 我正在寻找提高 Java 端和数据库端性能的方法。
在 java 端,这是获取数据的相关代码:
String connectionUrl = "jdbc:sqlserver://10.10.10.28:1433;databaseName=MYDB;user=MYUSER;password=MYPWD;selectMethod=direct;sendStringParametersAsUnicode=false;responseBuffering=adaptive;";
String query = "SELECT * FROM MYTABLE WHERE DateTimeField > '2019-03-25 00:00:00.0' AND DateTimeField < '2019-03-25 13:00:00.0'";
try (Connection sourceConnection = DriverManager.getConnection(connectionUrl);
Statement stmt = sourceConnection.createStatement(SQLServerResultSet.TYPE_SS_SERVER_CURSOR_FORWARD_ONLY, SQLServerResultSet.CONCUR_READ_ONLY) ) {
stmt.setFetchSize(100);
resultSet = stmt.executeQuery(query);
while (resultSet.next()) {
// do something
}
}
我已经将 fetch size 设置为 100 行,因为我注意到如果我将 fetch size 设置得太大会出现问题,可能是因为 xml 列在网络上发送很重。
有没有人有任何建议来提高在这种情况下获取数据的性能?
【问题讨论】:
-
在DB端使用索引,有助于提升服务器端的性能。在 Java 方面,您可以使用分页来限制页面大小的数据并获取有限的数据。看看这个:stackoverflow.com/questions/22998281/…
-
嗨@AliAzim,我正在使用 fetchSize 来指定每次检索的行数。是否足够或我可以使用其他参数?
-
是的,但是您应该对此进行一些研究。顺便说一句,您可以使用缓存来优化性能,而不是查询数据库表,您可以使用存储过程。
标签: java sql sql-server xml jdbc