我正在设计一个数据库,我想规范化数据库。在一个查询中,我将加入大约 30-40 个表。如果它变得非常流行,这会损害网站的性能吗?这将是主要的查询,它会在 50% 的时间里被调用。我将加入关于两个表的其他查询。
我现在可以选择规范化或不规范化,但如果将来规范化成为问题,我可能不得不重写 40% 的软件,这可能需要很长时间。在这种情况下,标准化真的会受到伤害吗?我现在应该在有时间的时候去规范化吗?
我正在设计一个数据库,我想规范化数据库。在一个查询中,我将加入大约 30-40 个表。如果它变得非常流行,这会损害网站的性能吗?这将是主要的查询,它会在 50% 的时间里被调用。我将加入关于两个表的其他查询。
我现在可以选择规范化或不规范化,但如果将来规范化成为问题,我可能不得不重写 40% 的软件,这可能需要很长时间。在这种情况下,标准化真的会受到伤害吗?我现在应该在有时间的时候去规范化吗?
当性能受到关注时,通常有比非规范化更好的选择:
标准化会损害性能。然而,这不是过早反规范化的理由。
从完全标准化开始,然后您将查看是否有任何性能问题。按照您描述的速度(每天 1000 次更新/插入),除非表格很大,否则我认为您不会遇到问题。
即使有大量的数据库优化选项(索引、准备好的存储过程、物化视图等)可供您使用。
也许我在这里遗漏了一些东西。但是,如果您的架构要求您在单个查询中连接 30 到 40 个表,并且该查询是您网站的主要用途,那么您将遇到更大的问题。
我同意其他人的观点,不要过早地优化您的网站。但是,您应该优化您的架构以解决您的主要用例。IMO 未优化 40 表连接的查询运行时间超过 50%。
不要进行早期优化。非规范化并不是加快网站速度的唯一方法。你的缓存策略也很重要,如果 30-40 个表的查询是相当静态的数据,缓存结果可能被证明是更好的优化。
此外,还要考虑写入次数与读取次数。如果您为每次插入或更新进行大约 10 次读取,您可以说数据是相当静态的,因此您应该将其缓存一段时间。
如果您最终对架构进行非规范化,您的写入也会变得更加昂贵,并且可能还会减慢速度。
在进行过多优化之前真正分析您的问题,并等待查看系统中的真正瓶颈,因为您最终可能会惊讶于您应该首先优化什么。