2010-07-04 27 views
1

我有一个数据库(在Postgres的运行,精确),具有以下结构:模式和索引与主键:查找性能差异?

user1 (schema) 
| 
- cars (table) 
- airplanes (table, again) 
... 
user2 
| 
- cars 
- airplanes 
... 

这显然不是结构化的方式经典关系databes是应该的,但它“只是工作”,因为它是现在。如您所见,模式就像用于识别条目的主键。

性能方面 -and什么else-,是否值得重建它,所以它会拥有传统主键(VARCHAR是他们的类型)&聚集索引,而不是模式?

回答

3

从性能的角度来看,实际上从任何角度来看,这肯定是一个NIGHTMARE,REBUILD!

不知道更多关于您的情况,我想答案是YES,这会影响性能。普通的简单查询不但编写和维护起来会复杂得多,而且数据库产生的查询计划的执行成本要高得多。

编辑:我曾经和设计过DB在高工作负载环境(银行和医疗)中处理大量数据,而我从未见过类似的东西;以及不在现代世界!

1

因此,它看起来像每个用户只有自己的架构?通常,大型的大型数据集被分离出来(在很多业务场景中更常见的是客户)。这往往是不成熟的优化,因为它会给应用程序带来额外的复杂性,并且具有用户列的单个表可以缩放到合理数量的行。

但是,无论您是否将组合成单个模式的任何性能确实取决于是否执行了许多跨用户查询(换句话说,必须跨越模式/表的查询)以及每组表中的数据是否是该用户专有的。如果您要将其他用户表中的数据复制到另一个用户的表中,那么您至少需要将这些表重新设计为一个通用模式。

在正常情况下(由于额外的维护开销和应用程序复杂性),我个人试图避免使用每个模式的方法,但它有它的位置。除非我没有正确理解某些东西,否则我几乎不会将其称为“噩梦”。

+0

只有昨晚有一个关于鸡没有羽毛和关系拆分跨多个模式的梦想! – 2010-07-04 21:22:08