在android上包含一个表的SQLite db文件的最大文件大小限制是多少

时间:2018-02-22 10:59:01

标签: database android-sqlite

在Android设备上包含一个表的SQLite db文件的最大大小限制是多少?表中的列数是否有限制?

1 个答案:

答案 0 :(得分:1)

可以在Limits In SQLite

找到这些和其他人的答案

就SQLite而言,文件大小很可能是底层文件系统的约束,而不是SQLite潜在的理论限制 140TB 。就SQLite而言,底层限制是默认为1073741823的最大页数,但可以大到2147483646.根据: -

  

数据库文件中的最大页数

     

SQLite能够限制数据库文件的大小以防止   数据库文件越来越大,耗费太多磁盘   空间。 SQLITE_MAX_PAGE_COUNT参数,通常设置为   1073741823,是单个允许的最大页数   数据库文件。尝试插入可能导致该数据的新数据   数据库文件增长大于此将返回SQLITE_FULL。

     

SQLITE_MAX_PAGE_COUNT的最大可能设置为2147483646。   当使用最大页面大小65536时,这会给出最大值   SQLite数据库大小约为140 TB。

     

max_page_count PRAGMA可用于提高或降低此限制   运行时间。

     

表中的最大行数

     

表中的理论最大行数为264   (18446744073709551616或约1.8e + 19)。此限制无法访问   因为最大数据库大小将达到140太字节   第一。一个140TB的数据库可以容纳不超过约   1e + 13行,然后仅当没有索引和每行时   包含的数据非常少。

     

最大数据库大小

     

每个数据库都包含一个或多个“页面”。在一个单一的   数据库,每个页面大小相同,但不同的数据库可以有   页面大小为512到65536之间的2的幂,包括端点。   数据库文件的最大大小为2147483646页。在   最大页面大小为65536字节,这转换为最大值   数据库大小约为1.4e + 14字节(140太字节,或128   tebibytes,或140,000千兆字节或128,000千兆字节)。

     

这个特定的上限未经测试,因为开发人员没有   可以访问能够达到此限制的硬件。但是,测试   在数据库中验证SQLite的行为是否正确和合理   达到底层文件系统的最大文件大小(即   通常远小于最大理论数据库大小)和何时   由于磁盘空间耗尽,数据库无法增长。

但是,其他限制可能会引起关注,因此建议研究与上述相关的文件。

默认的最大列数为 2000 ,您可以在编译时将其更改为最大 32767 ,具体如下: -

  

最大列数

     

SQLITE_MAX_COLUMN编译时参数用于设置上限   受限于:

     

表中的列数索引中的列数   视图中的列数.SET子句中的术语数   UPDATE语句a的结果集中的列数   SELECT语句GROUP BY或ORDER BY子句中的术语数   INSERT语句中的值的数量。的默认设置   SQLITE_MAX_COLUMN是2000.您可以在编译时将其更改为值   大到32767.另一方面,许多有经验的数据库   设计人员会争辩说,一个规范化的数据库永远不需要   表格中有超过100列。

     

在大多数应用程序中,列数很少 - 几十个。   SQLite代码生成器中有些地方使用算法   是O(N²),其中N是列数。所以,如果你重新定义   SQLITE_MAX_COLUMN是一个非常庞大的数字,你生成SQL   使用大量列,你可能会发现sqlite3_prepare_v2()   跑得很慢。

     

使用时,可以在运行时降低最大列数   sqlite3_limit(db,SQLITE_LIMIT_COLUMN,size)接口。