我今天从一本关于SQLite的书上读到了关键字":Memory:",但它只说明了它是什么,如何使用,并且解释太简短了.所以我在这里搜索了更多信息,但没有获得SQLite的具体信息.
":memory:"模式有什么优势?(我什么时候需要这个?)
内存数据库的性能更快?
我是否仍然需要在内存数据库上使用事务?
我今天从一本关于SQLite的书上读到了关键字":Memory:",但它只说明了它是什么,如何使用,并且解释太简短了.所以我在这里搜索了更多信息,但没有获得SQLite的具体信息.
":memory:"模式有什么优势?(我什么时候需要这个?)
内存数据库的性能更快?
我是否仍然需要在内存数据库上使用事务?
SQLite in-memory database的主要优势是性能:它将整个数据库保留在内存中,而不是读写磁盘.内存比磁盘快得多.旋转磁盘或IO负载较重的服务器的性能提升幅度最大,而固态硬盘的性能提升幅度较小.
但是,这并不是编写糟糕的查询和表的灵丹妙药.在使用内存数据库来提高性能之前,请确保优化表设计、查询和索引.
主要缺点是一旦进程关闭,数据库就消失了.并且数据库不能大于可用内存.
提交可能会更快,因为不需要写入磁盘,所以自动提交模式可能会更快,但事务仍应用于数据完整性目的.
请注意,不会变得太大的临时SQLite数据库可能会存储在内存中.
由于它的缺点,并且因为您的内存比存储少得多,所以在提交到内存中数据库之前,请try 使用临时数据库.这是通过使用''
作为数据库文件名来实现的.这将写入临时文件,但会将工作缓冲到内存缓存中.这是两全其美的,您可以在不使用太多内存的情况下提高性能.
尽管 for each 临时数据库分配了一个磁盘文件,但实际上临时数据库通常驻留在内存分页缓存中,因此由":Memory:"创建的纯内存数据库和由空文件名创建的临时数据库之间的差别很小.唯一的区别是":Memory:"数据库必须始终保留在内存中,而如果数据库变大或SQLite遇到内存压力,则临时数据库的部分内容可能会刷新到磁盘.
分析和基准测试您的应用程序以确保它将导致性能提高,考虑是否更好地优化您的查询并添加索引,并确保您的数据消失也没有问题.