我在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列在网络上发送时比较繁重。
在这种情况下,有没有人有任何建议来提高获取数据的性能?
发布于 2019-03-25 19:40:34
由于您的筛选器非常窄,因此性能问题很可能是由于缺少索引与列的大小造成的。
做一个简单的
Select count(*) from ......并查看性能。这很可能也会很慢,从而消除XML列的问题。
https://stackoverflow.com/questions/55336224
复制相似问题