1

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

我现在对文件的前 50% 有类似归零的页面吗?如果我添加另一批数据,我会填写那些归零的页面吗?

手册中提到了数据的碎片化:

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

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

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

严格连续页面中的数据是否有明显的性能提升?我可以期待一个包含大量碎片数据的数据库的“糟糕”性能吗?

4

1 回答 1

4

SQLite 自动重用空闲页面。

只有在以下情况下,碎片页面才会导致性能下降

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

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

于 2014-11-08T09:37:02.580 回答