我在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
}
}
我已将抓取大小设置为100行,因为如果设置的抓取大小太大,我可能会注意到问题,这可能是因为xml列很重,无法在网络上发送。
在这种情况下,有没有人建议提高性能以获取数据?
答案 0 :(得分:0)
由于您的过滤器非常狭窄,因此性能问题很可能是由于缺少索引和列大小所致。
做一个简单的
Select count(*) from ......
并查看性能。很有可能也会很慢,从而消除了XML列的问题。