SQLite数据库文件支持的最大表数

时间:2012-07-13 17:22:23

标签: sql database sqlite

即使在阅读SQLite limits之后,我找不到SQLite数据库文件可以容纳的最大表数。所以,我想知道是否

  1. SQLite数据库可以容纳多少个表?
  2. 在SQLite数据库文件中有数千个小表是一个问题吗?
  3. SQLite数据库文件中的许多表都会影响查询的性能吗?

3 个答案:

答案 0 :(得分:9)

SQLite中的限制列表记录为at this page。每个数据库没有最大数量的表,因此SQLite可能没有限制。每个JOIN限制为64个表。

  

4。连接中的最大表数

     

SQLite不支持包含超过64个表的连接。这个   限制源于SQLite代码生成器使用位图的事实   在查询优化器中每个连接表一位。

     

SQLite使用高效的查询计划器算法,因此即使是大型算法也是如此   加入可以快速准备。因此,没有机制提出或   降低连接中表数的限制。

     

15。架构中的最大表数

     

每个表和索引在数据库文件中至少需要一个页面。   前一句中的“索引”表示显式创建的索引   使用CREATE INDEX语句或UNIQUE创建的隐式索引   和PRIMARY KEY约束。由于a中的最大页数   数据库文件 2147483646(略多于20亿)这也是   然后是模式中表和索引数量的上限

     

每当打开数据库时,都会扫描并解析整个架构   并且模式的解析树保存在内存中。这意味着   数据库连接启动时间和初始内存使用情况   与模式的大小成比例。

表格结构是否相同?如果是这样,通常认为将它们存储在具有标识列的单个表中是更好的做法。

答案 1 :(得分:2)

我认为表的数量仅受数据库大小的限制。单个SQLite数据库中最多可包含2,147,483,646个页面。所以我猜这也是单个SQLite数据库中表的最大数量。

这是基于数据库页面仅用于表格的假设,这可能不是一个非常有用的假设。

答案 2 :(得分:2)

回答你的问题2和3,尽管有多个具有相似结构的表违反了数据库规范化的原则,但是有很多实际的原因可以解释为什么它比单个表或虚拟表更受欢迎 - 当然最大的是在SQLite中,删除表比列更容易。如果你采用简单的方法并且不做“正确的”规范化关系表,它也比在单个表的每一行中使用“tableX”占用更少的空间。

就性能而言,与“表”列中包含数十万个条目的单个表相比,使用数十万个表时,您将看不到任何问题,并且该列已编入索引。实际上,单个规范化表上的索引可能远远大于SQLite使用的表索引机制,效率较低。

说完这一切之后,我不能以健康的良心结束这篇文章而不是说像exec()被用于分配变量,变量名称是编程中常见的初学者错误,使得多个表应该在一个单个规范化表(虚拟或其他)是数据库体系结构中常见的初学者错误。在这两个区域中,情况都是使用exec或许多表格的正确选项。例如,如果您的数据非常相似,但您确定不会对数据进行任何加入,那么很多表都可以。尽管具有类似的结构,但确保您确实确实看到数据完全不相关。