在Android设备上包含一个表的SQLite db文件的最大大小限制是多少?表中的列数是否有限制?
答案 0 :(得分:1)
就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)接口。