在我目前的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);
然后我用光标运行数据并存储数据。
我希望有一种方法可以更快地导出数据。 感谢。
答案 0 :(得分:2)
我想,你真的应该放弃LIMIT功能。
通过使用LIMIT / OFFSET,您可以强制数据库一遍又一遍地读取相同的行块,特别是当您使用ORDER BY和/或JOINS时。
另一个问题,我会考虑(当我有db方案时),如果你真的需要JOIN。对我来说,它看起来可以避免,但当然数据库可以优化JOIN,我不能说没有一个方案,也许一个EXPLAIN。
如果这没有帮助,我建议不进行写作就读,所以你可以看到,如果你是数据库或在这种情况下写入绑定(正如罗伯特暗示的那样,PrintStream可能对写作不利) - - 当写入大量数据时,很可能写得很慢。
但是没有db方案和信息,如果读或写是问题,更好的答案真的很难!