批量读取数据库记录并排序

问题描述

我有一个包含多个表的数据库,其中包含数百万条记录(约 10 万条记录)。我的目标是处理数据(一些基本的 BODMAS 操作),然后将其批量写入 CSV 文件。为了优化内存,我想一次100K分批写入文件。 但是我希望在将这些记录写入文件时对其进行排序。有没有办法做到这一点? 应用程序代码在java中。

解决方法

我认为没有必要为这个查询分成多个批次

我怀疑(没有具体证据)MySQL 可以处理

 SELECT ... INTO OUTFILE '...'
     FROM ...
     ORDER BY ...

INTO OUTFILE 可能只是一个连续的操作。把它分成几块只会让它整体上需要更长的时间。

ORDER BY 将需要磁盘排序(除非您按 PRIMARY KEY 排序)。尽管这很昂贵,但只要有足够的磁盘空间,任何大小(甚至 100M 行)都是可行的。

此外,如果您要组合 CSV 文件并对其进行排序,则很可能需要更多时间。所以一次性完成。