我正在比较磁盘和内存数据库的速度。我正在尝试使用以下连接字符串向sqlite3数据库插入大约8mb的数据:
<configuration>
<connectionStrings>
<add name="Server" connectionString="Data Source=db.db3;Version=3;" providerName="System.Data.SQLite" />
</connectionStrings>
</configuration>
它可以在4秒内插入我的数据。
当我将连接字符串更改为以下字符串时:
<configuration>
<connectionStrings>
<add name="Server" connectionString="Data Source=:memory:;Version=3;" providerName="System.Data.SQLite" />
</connectionStrings>
</configuration>
我在0.5秒内插入数据。
但是当我按照以下方式更改设置时(注意Cache Size=16777216
)
<configuration>
<connectionStrings>
<add name="Server" connectionString="Data Source=db.db3;Version=3;Cache Size=16777216;" providerName="System.Data.SQLite" />
</connectionStrings>
</configuration>
再次结果为4秒,结果与缓存量无关。根据我的理解,缓存大小是数据量的两倍应该使我的数据在内存中稳定下来。当没有剩余缓存时,应该发生磁盘迁移......
如何让sqlite更具响应性?
答案 0 :(得分:3)
它的速度较慢,因为:内存意味着内存中的数据库,磁盘总是会变慢。您可以通过在事务中包装插入来加快速度,因为它只会在事务结束时刷新到磁盘一次。转换交易日志也会有所帮助,但会因崩溃和断电而更容易出现问题。
缓存不太可能加快速度,因为您不会多次使用同一页数据。
答案 1 :(得分:1)
根据SQL Lite Documentation,缓存大小的设置仅为建议。 “这项建议是否得到尊重,由Application Defined Page Cache”酌情决定。