4

在非规范化之前,我想知道这将对以下内容产生什么影响:

  • 查询响应时间
  • 数据库中的行宽
  • 结果所需的联接
  • 完成请求所需的查询数

如果我没记错的话,似乎所有这些都会减少

4

5 回答 5

3

If you happen to work in Microsoft SQL Server, I highly recommend keeping your tables normalized and using so called Indexed Views for denormalizations. These are semi-permanent data structures that are updated whenever the underlying tables are updated. This way you keep the best of both worlds -- normalized schema AND fast denormalized data!

Something similar may also exist for Oracle, not sure.

于 2009-06-15T20:27:03.177 回答
2

你的假设是正确的。非规范化会提高性能,但缺点是它会降低正确性。

此主题已在上一个stackoverflow 问题中详细讨论

于 2009-06-15T20:05:29.980 回答
2

数据库中行的宽度不会增加吗?

非规范化只能作为最后手段的优化。

它将增加数据库的大小并增加数据重复,并使数据保持最新和同步变得更加困难。

于 2009-06-15T20:06:53.423 回答
1

除了“数据库中的行数”之外,您的答案都是正确的。

“非规范化”意味着连续存储比严格必要的信息更多的信息。如果不增加行宽,这是不可能的。

但最重要的是:你没有问所有的问题。

你也想知道如果你故意在你的数据库中引入redencancy,那么你是否应该同时引入一些额外的数据库约束,以防止你的数据库包含损坏的数据(自相矛盾的数据)?

如果该问题的答案是“是”,那么也许您还应该问自己,是否强制执行所有那些仅因为您引入了冗余而需要的额外约束,是否不会导致您遭受类似(或更严重)的损失更新性能。

于 2009-06-16T16:31:06.030 回答
0

非规范化是一个相当广泛的术语,因此没有快速回答您的问题。

在避免加入的地方,检索可能会更快。但是,您增加了更新和数据维护的复杂性,因此需要进行权衡。

您似乎在询问是否会在整个系统范围内提高查询数量或速度,这也不是很有意义 - 最好将其视为对应用程序中特定瓶颈的特定本地优化,即要考虑使单个查询或一组查询运行得更快。

于 2009-06-15T20:12:07.530 回答