1

我有一个数据库,其中有一个包含“标题、专辑、艺术家......”等字段的表,它还有许多字段,其中包含每条记录的 html 内容(最多 30 个)。

问题是,这个数据库有数万条记录,并且由于 html 内容而有数百兆字节。由于 sqlite 文件的大小,搜索非常慢(在事务中插入新元素也非常慢~10-30 秒,对于 200 个新行)。第一个 LIKE 查询可能需要 10-15 秒,其他搜索足够快(创建索引并且工作正常)。当我从数据库中删除 html 内容时,搜索总是即时的。

所以问题是,存储额外的 html 内容的最佳方式是什么?现在我可以选择将它存储在单独的文件中,但它可以在未来生成多达 600k 的文件,而且创建起来很慢。将文件存储在 zip 存档中可能会达到其文件数量限制。其他选项是按表行压缩文件,将 html 存储在同一数据库中的单独表中,或为 html 内容创建单独的数据库文件。

什么会给我最好的表现?还是有其他更好的选择?我需要快速插入、更新和搜索。

4

2 回答 2

0

您可以考虑做几件不同的事情:

  • 将数据拆分为单独的表。然后,您可以在表之间进行 1:1 映射,并且仅在必要时将它们加入,从而在没有它们的情况下加快查询速度。
  • 检查您的索引。仅仅因为你拥有它们并且你认为它们正在工作,并不意味着它们是。如果我没记错的话,sqlite 每个查询最多使用一个索引,因此您需要确保您拥有可用于您正在使用的查询的最佳索引。ANALYZE 命令可以帮助解决这个问题。
于 2012-08-08T13:16:45.437 回答
0

经过几天的实验,我得出了这个结论:

  • 一个数据库文件和一个表是最慢的(最多 10 秒)
  • 一个数据库有两个表在最坏的情况下是一个表的两倍
  • 最快的是拥有两个单独的数据库文件。一个用于搜索所需的数据,另一个用于巨大的 html 数据。这在最坏的情况下几乎是即时的 ~300 毫秒,在正常使用中它是即时的

所以我建议在这种情况下使用两个单独的数据库文件。如果有人没有提供更快/更好的解决方案,我会接受这个作为答案。

于 2012-08-15T11:22:02.107 回答