SQLite 清理/碎片和性能下降

Cal*_*pau 3 sqlite premature-optimization vacuum

假设我定期将数据插入 SQLite 数据库,然后清除前 50% 的数据,但我不清理。

我现在是否有文件前 50% 的页面清零之类的内容?如果我添加另一批数据,我是否会填写那些清零的页面?

手册提到了数据碎片:

频繁的插入、更新和删除可能会导致数据库文件变得碎片化 - 单个表或索引的数据分散在数据库文件中。

VACUUM 确保每个表和索引在很大程度上连续存储在数据库文件中。在某些情况下,VACUUM 还可以减少数据库中部分填充的页数,从而进一步减小数据库文件的大小。

但这并不表明这必然会导致性能下降。它主要暗示了可以通过吸尘来节省浪费的空间。

严格连续页面中的数据是否有明显的性能提升?我可以期望具有大量碎片数据的数据库获得“糟糕”的性能吗?

CL.*_*CL. 5

SQLite 自动重用空闲页面。

仅当出现以下情况时,碎片页面才会导致性能下降:

  • 数据量太大,无法缓存,并且
  • 您的存储设备的寻道速度相对较慢(例如硬盘或廉价的闪存设备),并且
  • 您访问数据的频率足够高,因此差异很重要。

只有一种方法可以确定您的应用程序是否属于这种情况:测量它。