使用java从数据库中优化下载数据



我们正在使用java从oracle/mssql数据库下载大约1000万个数据。

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

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

有什么方法可以优化它吗?

您需要确定可以安全返回查询的记录数。你需要看看一条记录的平均大小RecordSize有多大,然后你需要确定MaxSize。您可以通过这种方式加载的记录数是

MaxSize/RecordSize

但您可能希望加载更少的记录,以避免记录平均值略大于预期的问题:

0.9*MaxSize/RecordSize

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

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

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

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

最新更新