【问题标题】:What effect will denormalization have on queries, joins and response time?非规范化会对查询、连接和响应时间产生什么影响?
【发布时间】:2010-11-03 03:23:05
【问题描述】:

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

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

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

【问题讨论】:

    标签: database denormalization


    【解决方案1】:

    除了“with of rows in the database”,你的答案都是正确的。

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

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

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 物化视图?我不完全确定索引视图是什么,但它们听起来很相似。
      【解决方案3】:

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

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

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

      【讨论】:

        【解决方案4】:

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

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

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

        【讨论】:

        • 这就是为什么它非常适合数据仓库(您不保持任何最新的东西),并且非常适合在线事务数据库。不同的用途搭配不同的设计效果更好。
        • 行的宽度会增加吗?对不起。你能解释一下吗?
        • @Gunther 如果您进行非规范化,那么您将使用非规范化数据向表中添加额外的列,因此您的行将具有更多列并且更宽。这也意味着更少的行将适合一个页面并会占用更多的内存。
        【解决方案5】:

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

        这个话题已经在之前的stackoverflow question

        中详细讨论过了

        【讨论】:

          猜你喜欢
          • 2016-03-26
          • 2019-06-13
          • 2019-06-24
          • 1970-01-01
          • 2010-11-25
          • 2010-11-28
          • 1970-01-01
          • 2019-12-19
          • 2012-03-22
          相关资源
          最近更新 更多