如何在 Java 中提高 select 查询性能?有没有办法使用多线程进行 select 查询?
How to improve the select query performance in Java ? Is there a way to do select query using multi threading?
我需要从我在数据库中创建的队列中执行 select 查询,该视图有大约 30,00,000 行,需要大约 2 分钟来读取此数据并将其存储在本地内存使用 JTDS JDBC 驱动程序。我读取数据的顺序无关紧要。现在我只是使用准备好的语句并从结果集中读取。有没有更好的方法从数据库中读取?
我正在从 MS SQL 服务器读取数据。
我现在的阅读方式是
public ResultSet getData(String view_name) throws SQLException {
String SQL="select * from "+view_name;
PreparedStatement stmt=conn.prepareStatement(SQL);
resultSet= stmt.executeQuery();
resultSet.setFetchSize(8000);
return resultSet;
}
如您所知,一旦可用内存的大小开始减少,应用程序的性能就会下降,这将 return 在更频繁的 GC 周期中。
Is there a better way to read from data base ?
您是否尝试过 ResultSet
的流式传输和自适应缓冲的使用? What is adaptive response buffering and why should I use it?
自适应缓冲旨在检索任何类型的大值数据,而无需服务器游标的开销。应用程序可以执行 SELECT
语句,该语句生成的行数多于应用程序可以存储在内存中的行数。自适应缓冲提供了 forward-only
read-only
传递任意大结果集的能力,而无需服务器游标。
当使用get<Type>Stream
方法读取一次大值时,ResultSet
列和CallableStatement
OUT
参数的访问顺序为[=39] =]由 SQL 服务器编辑,自适应缓冲最大限度地减少了处理结果时应用程序内存的使用。
您可以查看此 MSDN 库 post,了解有关 Using Adaptive Buffering 的更多信息。
不确定 MS SQL,但在 MySQL 中可以启用 resultset
的流式传输,如下所示。
stmt = conn.createStatement(java.sql.ResultSet.TYPE_FORWARD_ONLY,
java.sql.ResultSet.CONCUR_READ_ONLY);
stmt.setFetchSize(Integer.MIN_VALUE);
希望对您有所帮助。
我需要从我在数据库中创建的队列中执行 select 查询,该视图有大约 30,00,000 行,需要大约 2 分钟来读取此数据并将其存储在本地内存使用 JTDS JDBC 驱动程序。我读取数据的顺序无关紧要。现在我只是使用准备好的语句并从结果集中读取。有没有更好的方法从数据库中读取? 我正在从 MS SQL 服务器读取数据。 我现在的阅读方式是
public ResultSet getData(String view_name) throws SQLException {
String SQL="select * from "+view_name;
PreparedStatement stmt=conn.prepareStatement(SQL);
resultSet= stmt.executeQuery();
resultSet.setFetchSize(8000);
return resultSet;
}
如您所知,一旦可用内存的大小开始减少,应用程序的性能就会下降,这将 return 在更频繁的 GC 周期中。
Is there a better way to read from data base ?
您是否尝试过 ResultSet
的流式传输和自适应缓冲的使用? What is adaptive response buffering and why should I use it?
自适应缓冲旨在检索任何类型的大值数据,而无需服务器游标的开销。应用程序可以执行 SELECT
语句,该语句生成的行数多于应用程序可以存储在内存中的行数。自适应缓冲提供了 forward-only
read-only
传递任意大结果集的能力,而无需服务器游标。
当使用get<Type>Stream
方法读取一次大值时,ResultSet
列和CallableStatement
OUT
参数的访问顺序为[=39] =]由 SQL 服务器编辑,自适应缓冲最大限度地减少了处理结果时应用程序内存的使用。
您可以查看此 MSDN 库 post,了解有关 Using Adaptive Buffering 的更多信息。
不确定 MS SQL,但在 MySQL 中可以启用 resultset
的流式传输,如下所示。
stmt = conn.createStatement(java.sql.ResultSet.TYPE_FORWARD_ONLY,
java.sql.ResultSet.CONCUR_READ_ONLY);
stmt.setFetchSize(Integer.MIN_VALUE);
希望对您有所帮助。