sqlite3 是否需要在查询运行之前将整个 sqlite DB 读入内存? IOW,基于可用内存的数据库大小是否受到限制?
换句话说,SQLite3 处理数据库文件的方式与像 postgres 这样的数据库处理它的数据库文件的方式相同......搜索特定文件/页面的记录,诸如此类的事情。或者SQLite是否需要将整个db文件读入内存才能搜索特定的东西?
我一直有这样的印象:是后者。但我可能是错的。
除非您使用内存数据库,否则。
附加信息: 它来自此页面:https://sqlite.org/forum/info/23f41177ccabed1e
下面的摘录清楚地表明整个文件未被读取。
我怀疑发生的事情一定比您描述的更多。 如果我在 SQLite 的检测构建上运行此查询,记录所有读/写并将其指向 16709362688 字节的 SQLite 数据库,则该进程仅从文件中读取 4712 字节。确实很快就完成了,这表明 16gb 文件并未全部读取。
此外,该页面中的OP也证实了这一点:
你是对的 - 确实有一个干预过程(在打开数据库文件之前对其进行压缩)导致了延迟。在未压缩的数据库文件上,响应时间非常好。 对于造成的混乱表示歉意,并感谢大家的帮助!约翰
所以,总之,整个文件永远不会被读取,除非需要解压缩。