SQLite 结果集是内存数据结构吗?

Are SQLite result sets in-memory data structures?

我目前发现自己需要对数百万个数据点进行相当简单的计算。 (从一个定义良好的数千兆位文件构建一个大的字符串列表,对该列表进行排序,然后将其与另一个列表(一个超集)进行比较。)这​​是我们大多数人通常对数据完全进行的简单工作-内存,但如果我试图将所有内容都保存在内存中,我需要处理的数据单元的大小和数量可能会使 RAM 成为一个问题。我很快意识到我可能需要在某些时候将数据写入文件,以避免耗尽系统资源。为此,我决定使用 SQLite3。 (这对于 CSV 来说可能有点多。)它相当轻巧,但它的存储限制似乎安全地超过了我的要求。

我遇到的问题是准确理解结果集的工作原理。我遇到的文档对此似乎有些含糊。显然,SQLite 不会在每次执行 SELECT 语句时向数据库写入一个全新的 table 。这是否意味着它在一个完整的内存 table 中复制所有选定的字段,或者它是否只在内存中保留某种指针(而不是实际数据)?完全不同?

我需要能够对相关数据进行排序。如果结果集真的只是内存中的数据结构,那么简单地创建一个新的 table 并在 ORDER BY 的帮助下填充它可能不是一个好主意。

SQLite 并没有真正的结果集。它有游标,只允许访问当前行,不能向后移动。

SQLite 即时计算结果,因此内存中一次只需要一行。

当计算需要访问多行时(即,聚合函数,或没有可用索引的排序),尽可能多的数据被保存在 cache, and then spilled to disk in a temporary database.