如何从SQLite中读取4百万行并快速将它们写入文件?

时间:2015-06-12 13:20:37

标签: android sqlite

在我目前的android项目中,我正在开发一个记录通信数据的应用程序。每个数据包都存储在我的SQLite数据库中的一行中。我的一个测试录音有3.888.530行。

应用程序应支持导出功能,将此数据写入JSON格式的文本文件中。目前我正在使用 LIMIT 功能,读取5.000行的包并将它们写入文件。这真的很慢。我认为从数据库中读取15.000行并将它们写入文件需要60多个。

写作我正在使用PrintStream。创建一个字符串,并将流转换为字节数组。

我使用此查询读取了数据包:

SELECT * 
FROM data_packet 
INNER JOIN data_packet_type 
    ON data_packet.data_packet_type_id = data_packet_type.id 
WHERE recording_id = 7 
ORDER BY time_received ASC 
LIMIT 5000 OFFSET 0

执行查询时调用:

db.rawQuery(query, null);

然后我用光标运行数据并存储数据。

我希望有一种方法可以更快地导出数据。 感谢。

1 个答案:

答案 0 :(得分:2)

我想,你真的应该放弃LIMIT功能。

通过使用LIMIT / OFFSET,您可以强制数据库一遍又一遍地读取相同的行块,特别是当您使用ORDER BY和/或JOINS时。

另一个问题,我会考虑(当我有db方案时),如果你真的需要JOIN。对我来说,它看起来可以避免,但当然数据库可以优化JOIN,我不能说没有一个方案,也许一个EXPLAIN。

如果这没有帮助,我建议不进行写作就读,所以你可以看到,如果你是数据库或在这种情况下写入绑定(正如罗伯特暗示的那样,PrintStream可能对写作不利) - - 当写入大量数据时,很可能写得很慢。

但是没有db方案和信息,如果读或写是问题,更好的答案真的很难!