6

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

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

4

5 回答 5

4

我引用:“为了正确性而规范化,为了速度而去规范化 - 并且仅在必要时”

我向您推荐:就数据库而言,“为了正确性而规范化,为了性能而去规范化”是正确的口头禅吗?

HTH。

于 2010-04-24T00:13:54.000 回答
3

当性能受到关注时,通常有比非规范化更好的选择:

  • 在涉及的表上创建适当的索引和统计信息
  • 缓存
  • 物化视图(MS SQL Server 中的索引视图)
  • 除了在大多数情况下使用的规范化表(需要编写同步代码,它可以作为触发器或计划作业运行,具体取决于您需要的数据准确性)
于 2010-04-24T00:34:22.857 回答
1

标准化会损害性能。然而,这不是过早反规范化的理由。

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

即使有大量的数据库优化选项(索引、准备好的存储过程、物化视图等)可供您使用。

于 2010-04-24T00:45:19.447 回答
1

也许我在这里遗漏了一些东西。但是,如果您的架构要求您在单个查询中连接 30 到 40 个表,并且该查询是您网站的主要用途,那么您将遇到更大的问题。

我同意其他人的观点,不要过早地优化您的网站。但是,您应该优化您的架构以解决您的主要用例。IMO 未优化 40 表连接的查询运行时间超过 50%。

于 2010-04-24T02:47:59.693 回答
0

不要进行早期优化。非规范化并不是加快网站速度的唯一方法。你的缓存策略也很重要,如果 30-40 个表的查询是相当静态的数据,缓存结果可能被证明是更好的优化。

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

如果您最终对架构进行非规范化,您的写入也会变得更加昂贵,并且可能还会减慢速度。

在进行过多优化之前真正分析您的问题,并等待查看系统中的真正瓶颈,因为您最终可能会惊讶于您应该首先优化什么。

于 2010-04-24T00:19:54.877 回答