【问题标题】:Retrieving a million records from a database从数据库中检索一百万条记录
【发布时间】:2011-11-29 16:57:23
【问题描述】:

有一个数据库,它在一个表中包含大约 200 万条记录。我从我的 java 代码中运行了这样的查询“select * from table”。它会从结果集中的数据库中获取完整的数据吗?或不 。如果是,那么它将如何工作我想了解这个检索的工作,

请告诉我,我在某处了解到它将从数据库中检索完整的数据,并将存储在临时存储中,并从那里显示在输出中。可以吗? 或者有没有和J2C相关的东西

【问题讨论】:

  • 如果您只是使用数据库来检索大部分表,那么使用数据库可能不是最佳选择。当您只需要数据库中一小部分数据时,数据库工作得最好。否则,您可能最好使用文件或更简单的持久性存储。从数据库中获取 200 万个条目所花费的时间是从文件中获取的许多倍。

标签: java database


【解决方案1】:

这是几乎相同的问题。 How to handle huge result sets from database

您询问它是否会获取完整的数据集。它会。因此,建议不要获取整个数据库。这是关于它的保存位置java - mysql - select query outfile - where is file getting saved

【讨论】:

    【解决方案2】:

    它会从结果集中的数据库中获取完整的数据吗

    没有确切的答案。它总是依赖于数据库驱动程序。结果集是一个接口,它的实现由特定的数据库驱动程序完成。 ResultSet 实现可能有它自己的优化,其中对于较小的数据集,所有数据都被提取,而对于较大的数据集,它的缓冲(或一些默认的分页机制)。所以请参考数据库驱动文档。

    有一个标准(至少 javadoc 是这样说的)方法来防止从数据库中获取大数据。如下java.sql.Statement.setFetchSize() 为JDBC 语句设置适当的提取大小。

    作为java文档

    为 JDBC 驱动程序提供关于应该存储的行数的提示 当需要更多行时从数据库中获取。的数量 指定的行仅影响使用此语句创建的结果集。 如果指定的值为零,则忽略提示。默认 值为零。

    希望这会有所帮助。

    【讨论】:

    • 如果我不设置一次从数据库中检索多少行的大小,那么它将返回 300 万条记录。
    • 不会的。结果集是由数据库作为查询结果准备的表的形式。你得到的是这个表的光标。对于较大数据集的大多数数据库/驱动程序,通常就是这种情况。
    猜你喜欢
    • 2016-03-06
    • 1970-01-01
    • 2012-02-21
    • 2021-03-15
    • 1970-01-01
    • 1970-01-01
    • 2010-11-27
    • 1970-01-01
    • 2015-05-13
    相关资源
    最近更新 更多