问题1: 数据库中最多可以存储多少张表?
问题2: 视图中最多可以 union 多少张表?
问题1: 数据库中最多可以存储多少张表?
问题2: 视图中最多可以 union 多少张表?
问题1:在文档中没有明确的限制。实际上,一些操作会随着表数量的增加变为O(n);当数据库中有成千上万个表时,预计规划时间会增加,并且会出现自动清理等问题。
问题2:这要看查询的情况。通常,大型联合查询是不好的选择。表继承会稍微好一些,但如果你使用constraint_exclusion
,则规划时间会大大增加。
这两个问题都暗示了你的设计存在潜在问题。你不应该需要大量的表和庞大的联合查询。
根据其他答案中的评论,你真正需要创建几个表。你似乎想要为每个电话号码创建一个表,这是没有意义的,并且在其上创建视图也是如此。不要这样做,这样对数据进行错误建模只会使它更难以处理。通过索引、where子句和连接,可以更有效地使用逻辑上结构化的少量表中的数据。我建议学习基本的关系建模。
如果以后遇到可扩展性问题,可以查看分区,但你不需要成千上万个表来解决问题。
从实际意义上讲,它们都没有限制。
一个数据库可以拥有的表的数量受到磁盘系统空间的限制。然而,如果您的数据库拥有超过几千个表,那么这可能更多地反映了您应用程序领域分析不正确。对于union来说也是如此:如果您必须联合多个表,那么您可能应该查看您的表结构。
一个实际的场景是Postgis:有许多具有类似属性的表可以在单个视图中连接(在我看来这是Postgis设计上的缺陷),但通常应该在应用程序端(例如GIS)处理。
您能解释一下需要在一次扫描中查询大量表的情况吗?
search_path
进行贫民分区(即每个客户端克隆一个模式),导致表格计数更高并不太罕见。 - Craig Ringer