我有一个包含超过1亿条记录的数据库。我正在运行一个包含超过1000万条记录的查询。这个过程需要太长时间,因此我需要缩短这个时间。我想将我的获取记录列表保存为csv文件。请问如何以最快和最优的方式完成?期待您的建议。谢谢。
我有一个包含超过1亿条记录的数据库。我正在运行一个包含超过1000万条记录的查询。这个过程需要太长时间,因此我需要缩短这个时间。我想将我的获取记录列表保存为csv文件。请问如何以最快和最优的方式完成?期待您的建议。谢谢。
我假设您的查询已经限制到了您需要的行/列,并且充分利用了索引。
在这个规模下,唯一关键的是不要一次性将所有内容加载到内存中,因此请忘记诸如DataTable
和大部分完整的ORM(通常会尝试将行与身份管理器和/或更改管理器相关联)等东西。您必须使用原始的IDataReader
(来自DbCommand.ExecuteReader
),或者在其上构建一个非缓冲迭代器的任何API(有几种选择;我比较偏向Dapper)。为了编写CSV文件,原始数据读取器可能就足够了。
除此之外:由于带宽受限,您无法让它运行得更快。唯一能加速的方式是在数据库服务器上创建CSV文件,以便没有网络开销。
真正的问题是为什么需要从数据库中读取这么多行数据(以及底层数据集的如此大比例)。有许多方法可以避免这种情况,其中明显的方法包括同步处理、消息队列和预先整合。
暂且不谈这个问题…如果你正在整合数据或者筛选数据,那么将大部分逻辑实现在PL/SQL中可以避免通过网络传输数据(即使只是本地主机,仍然存在很大的开销)。同样,如果你只想将其导出到平面文件中,用C#实现也没有什么好处。