如果SQLite数据库大小大于2GB,性能会下降吗?

74
去年当我在 SQLite 官网查阅时,官方推荐的 SQLite 数据库大小为 2GB。但现在我无法再找到该推荐了。
因此,有人尝试使用最新版本的 SQLite 处理超过 2GB 的数据库吗?SQLite 的性能如何?
附言:我想制作一个需要大型数据库(例如存储维基百科文章)本地工作的移动应用程序。

大多数应用程序使用API。但我赞扬你的尝试,我想知道你最终选择了什么,是使用SQL Lite还是使用API。我也希望我的应用程序可以离线工作。您还需要考虑如何在某人的手机上支持2GB以上的文件,这确实不太可能。 - c-sharp-and-swiftui-devni
2个回答

99

没有2 GB的限制。

SQLite数据库文件最大大小约为140 TB。

在手机上,存储空间的大小(几GB)将限制您的数据库文件大小,而内存大小将限制您从查询中检索多少数据。 此外,Android游标对结果有1 MB的限制。


仅数据库大小本身不会影响性能。 只要查询不访问超出DB页面缓存 (默认为2 MB) 的数据,您的查询速度将很快。


6
谢谢您的有用回答。但我想知道的是,SQLite 的性能会受到数据库大小的影响如何。 - Enkhbat
1
我阅读了StackOverflow上的其他答案,人们已经成功地使用了更大的数据库(甚至高达100GB),因此我非常确定SQLite可以很好地处理2GB的数据。 - DouglasHeriot
1
我假设这个限制对于Python的SQLite模块并不适用,只要您可以使用游标一次迭代一行。 - PirateApp
@PirateApp 嗯,我不太清楚“Android光标结果限制为1 MB”是什么意思...这是否意味着每行最多可以达到1MB的大小,因为您可以逐行迭代光标?如果不是,那么如何处理更大的数据集? - Michael
1
截至发布3.33.0版(2020年8月14日),最大尺寸为281 TB。https://www.sqlite.org/changes.html - Jouni K. Seppänen

31

通常情况下,数据库越大,其中包含的数据就越多。数据越多,搜索所需时间就越长。具体取决于搜索。

至于插入操作,如果一张表上有许多索引,则可能需要更长的时间。重建索引可能需要一些时间,因此插入速度会随着数据量的增加而变慢。

更新也可能会变慢——必须先查找适当的行(搜索),然后才能更改值(可能会触发索引重建)。

通过个人经验告诉你:如果你的数据库中有大量数据,请考虑将其拆分为多个数据库。如果您的数据是每天收集的,可以为每天创建一个数据库。这可能会使您的搜索代码更复杂,但会提高有限搜索的速度。


2
尽管我同意你的说法,但是如果你正在手机上创建应用程序,创建许多文件可能不是最好的选择...拥有许多单独的文件会占用更多的磁盘空间。 - Alexis Wilke
1
@AlexisWilke 对于大多数文件系统而言,对于大小合理的文件(比如1MB以上),每个文件丢失的空间都是微不足道的。 - Dariusz
@Dariusz 你好,如果我想保存每个瓦片大小约为20kb的图像瓦片,并且总大小将约为40TB,我该如何处理将数据添加到sqlite数据库中?你有任何增加插入性能的想法吗?总瓦片数约为1831292252。 - Majid Hojati
@MajidHojati 如果你没有索引、外键等,那么在这种情况下,插入性能应该仅受到磁盘性能的限制。 - Dariusz
@Dariusz,所以我必须先插入数据,然后再在表上启用索引。对吗? - Majid Hojati

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接