我一直试图弄清楚MySql的ResultSet Streaming是否适用于复杂的查询。我通过
使用了MySql的ResultSet流媒体 statement = connection.createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY);
statement.setFetchSize(Integer.MIN_VALUE);
// Simple select * from my table, streaming works great
rs = statement.executeQuery("select * from my_table");
在查询只是" select * from my_table"时工作正常。但我注意到,如果我的查询不仅仅是一个简单的" select * from my_table",那么流媒体方法就不起作用了。当我调试我的应用程序(Java)时,我注意到使用简单的查询结果很快就会恢复。当我将其切换为使用更复杂的查询时,它只是挂起(好吧,我在5分钟后杀死了该进程,因为它仍然试图获取结果)。我试图带回的数据有超过3000万行,这就是我想使用MySql ResultSet流接近的原因。
我做了一些调查,但无法找到有关MySql ResultSet流媒体支持哪种查询类型的信息。文档https://dev.mysql.com/doc/connector-j/5.1/en/connector-j-reference-implementation-notes.html没有提供任何相关信息。
答案 0 :(得分:0)
当结果准备好传输时,就会发生流式传输。如果您有一个复杂的查询,它仍然需要几分钟才能流式传输第一行。
流式传输是有利的,因为它允许您为较大的结果集使用较少的内存。从速度的角度来看,在处理它们之前将所有结果读入内存基本上总是更好。