在非规范化之前,我想知道这将对以下内容产生什么影响:
- 查询响应时间
- 数据库中的行宽
- 结果所需的联接
- 完成请求所需的查询数
如果我没记错的话,似乎所有这些都会减少?
在非规范化之前,我想知道这将对以下内容产生什么影响:
如果我没记错的话,似乎所有这些都会减少?
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.
你的假设是正确的。非规范化会提高性能,但缺点是它会降低正确性。
此主题已在上一个stackoverflow 问题中详细讨论
数据库中行的宽度不会增加吗?
非规范化只能作为最后手段的优化。
它将增加数据库的大小并增加数据重复,并使数据保持最新和同步变得更加困难。
除了“数据库中的行数”之外,您的答案都是正确的。
“非规范化”意味着连续存储比严格必要的信息更多的信息。如果不增加行宽,这是不可能的。
但最重要的是:你没有问所有的问题。
你也想知道如果你故意在你的数据库中引入redencancy,那么你是否应该同时引入一些额外的数据库约束,以防止你的数据库包含损坏的数据(自相矛盾的数据)?
如果该问题的答案是“是”,那么也许您还应该问自己,是否强制执行所有那些仅因为您引入了冗余而需要的额外约束,是否不会导致您遭受类似(或更严重)的损失更新性能。
非规范化是一个相当广泛的术语,因此没有快速回答您的问题。
在避免加入的地方,检索可能会更快。但是,您增加了更新和数据维护的复杂性,因此需要进行权衡。
您似乎在询问是否会在整个系统范围内提高查询数量或速度,这也不是很有意义 - 最好将其视为对应用程序中特定瓶颈的特定本地优化,即要考虑使单个查询或一组查询运行得更快。