非规范化对查询,连接和响应时间有什么影响?

时间:2009-06-15 19:59:00

标签: database denormalization

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

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

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

5 个答案:

答案 0 :(得分:2)

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

此主题已在之前的 stackoverflow question

中详细讨论过

答案 1 :(得分:2)

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

非规范化只应作为最后的优化来完成。

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

答案 2 :(得分:2)

如果您碰巧在Microsoft SQL Server中工作,我强烈建议您保持表的规范化并使用所谓的索引视图进行非规范化。这些是半永久性数据结构,只要更新基础表,就会更新这些数据结构。这样你可以保持两全其美 - 标准化模式和快速非规范化数据!

Oracle也可能存在类似的东西,不确定。

答案 3 :(得分:1)

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

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

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

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

如果这个问题的答案是'是',那么也许你应该问自己是否强制执行所有那些因为你引入了再造而只需要的额外约束,不会导致你招致类似的(或者更多的)更新性能下降。

答案 4 :(得分:0)

非规范化是一个相当宽泛的术语,所以对你的问题没有快速的答案。

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

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