规范化是否真的会损害高流量网站的性能?

时间:2010-04-24 00:08:28

标签: c# performance sql-server-2008 normalization denormalization

我正在设计一个数据库,我想规范化数据库。在一个查询中,我将加入大约30-40个表。如果它变得非常受欢迎,这会损害网站性能吗?这将是主要查询,它将在50%的时间内被调用。我将加入关于两个表的其他查询。

我现在可以选择规范化还是不规范化,但如果规范化将来成为一个问题,我可能需要重写40%的软件,这可能需要很长时间。在这种情况下,规范化真的会受到伤害吗在我有空的时候,我应该现在正规化吗?

5 个答案:

答案 0 :(得分:4)

我引用:“正确化标准化,速度非标准化 - 仅在必要时”

我推荐你:In terms of databases, is "Normalize for correctness, denormalize for performance" a right mantra?

HTH。

答案 1 :(得分:3)

当表现成为一个问题时,通常有更好的选择而不是非规范化:

  • 在相关表格上创建适当的索引和统计信息
  • 缓存
  • 物化视图(MS SQL Server中的索引视图)
  • 拥有表的非规范化副本(专门用于需要它们的查询),以及大多数情况下使用的规范化表(需要编写同步代码,可以作为触发器或预定作业运行取决于您需要的数据准确度)

答案 2 :(得分:1)

规范化会影响性能。然而,这并不是过早反规范化的理由。

从完全规范化开始,然后您将看到是否存在任何性能问题。按照您描述的速度(每天1000次更新/插入),我认为除非表格很大,否则您将遇到问题。

即使您可以使用大量数据库优化选项(索引,准备存储过程,物化视图......)。

答案 3 :(得分:1)

也许我在这里遗漏了一些东西。但是,如果您的体系结构要求您在单个查询中加入30到40个表格,则该查询的广告是您网站的主要用途,那么您就会遇到更大的问题。

我同意他人的意见,不要过早地优化您的网站。但是,您应该优化您的体系结构以考虑您的主要用例。对于超过50%的时间运行查询的40个表连接未优化IMO。

答案 4 :(得分:0)

不要进行早期优化。非规范化不是加速网站的唯一方法。您的缓存策略也非常重要,如果30-40个表的查询具有相当静态的数据,则缓存结果可能是更好的优化。

另外,请考虑写入次数的写入次数。如果您对每次插入或更新进行大约10次读取,则可以说数据是相当静态的,因此您应该将其缓存一段时间。

如果您最终对模式进行非规范化处理,那么您的写入也会变得更加昂贵并且可能会减慢速度。

在进行太多优化之前,真正分析您的问题,并等待系统中的瓶颈确实在哪里,因为您可能最终会对首先应该优化的内容感到惊讶。