使用Java

时间:2018-07-23 15:10:08

标签: java sql-server database oracle11g oracle10g

我们正在使用Java从oracle / mssql数据库中下载大约一千万个数据。

我们一次要提取5000条记录,而要提取5000条记录则需要5分钟(具体取决于条件),因此,获取和下载1000万条记录将花费(1000万/ 5000)* 5分钟,即10000分钟。

我们尝试一次获取100000条记录,但可能会遇到堆空间问题。

有什么方法可以优化吗?

1 个答案:

答案 0 :(得分:0)

您将需要确定可以安全返回查询的记录数。您将需要查看平均记录大小RecordRecord的大小,并且需要确定MaxSize。您可以通过这种方式加载的记录数是

MaxSize / RecordSize

但是您可能希望加载较少的记录,以避免平均记录比预期稍大的问题:

0.9 * MaxSize / RecordSize

此外,您需要将查询优化为:

  • 不加载不必要的列
  • 使where,having和on子句更快

您可以将查询分为两步方法:首先使用实际条件运行查询并仅获取ID,然后仅使用ID作为条件查询实际列。如果您碰巧使用联接来收集某些列,并且在收集ID时不需要所有联接,则这特别有用。

此外,如果数据库未规范化,则可以通过规范化数据库并为执行条件的列建立索引来改善数据库。但是,您需要小心索引,因为尽管它可以加快读取速度,但会减慢写入速度。