首页 > 解决方案 > 使用java优化从数据库下载数据

问题描述

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

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

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

有什么办法可以优化吗?

标签: javasql-serverdatabaseoracle11goracle10g

解决方案


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

最大尺寸/记录尺寸

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

0.9 * MaxSize / RecordSize

此外,您需要优化查询以:

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

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

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


推荐阅读