我有一个数据库(精确地在postgres上运行),具有以下结构:
user1 (schema)
|
- cars (table)
- airplanes (table, again)
...
user2
|
- cars
- airplanes
...
它显然没有像经典关系数据库那样的结构化,但它“现在正常运作”。如您所见,模式就像用于标识条目的主键。
在性能方面 - 没有别的 - 是值得重建的,因此它将拥有传统的主键(varchar是他们的类型)&聚集索引而不是模式?
答案 0 :(得分:3)
从性能视角来看,实际上从任何角度来看,这都是一个NIGHTMARE,REBUILD!
在不了解您的情况的情况下,我猜答案是肯定的,这会影响表现。普通的简单查询不仅编写和维护要复杂得多,而且数据库会产生执行成本更高的查询计划。
编辑:我已经与DB合作,设计了数据库来处理高工作负载环境(银行和医疗)中的大量数据,我从未见过类似的东西;而不是现代世界!
答案 1 :(得分:1)
所以看起来每个用户都有自己的架构?通常,大型,大型数据集会在此附近拆分(在很多业务场景中,客户更常见)。它通常是一个过早的优化,因为它为您的应用程序带来了额外的复杂性,并且具有用户列的单个表将扩展到合理的行数。
但是,无论您是否通过组合到单个模式中获得任何性能,确实取决于您是否执行许多跨用户查询(换句话说,是否必须跨越模式/表的查询)以及是否每组表中的数据对该用户是唯一的。如果要将其他用户表中的数据复制到另一个用户表,则至少需要将这些表重新设计为公共模式。
我个人试图在正常情况下避免采用每个模式的方法(由于额外的维护开销和应用程序复杂性),但它有它的位置。除非我没有正确理解,否则我很难称之为“噩梦”。