我正在设计一个数据库,我想规范化数据库。在一个查询中,我将加入大约30-40个表。如果它变得非常受欢迎,这会损害网站性能吗?这将是主要查询,它将在50%的时间内被调用。我将加入关于两个表的其他查询。
我现在可以选择规范化还是不规范化,但如果规范化将来成为一个问题,我可能需要重写40%的软件,这可能需要很长时间。在这种情况下,规范化真的会受到伤害吗在我有空的时候,我应该现在正规化吗?
答案 0 :(得分:4)
我引用:“正确化标准化,速度非标准化 - 仅在必要时”
我推荐你:In terms of databases, is "Normalize for correctness, denormalize for performance" a right mantra?
HTH。
答案 1 :(得分:3)
当表现成为一个问题时,通常有更好的选择而不是非规范化:
答案 2 :(得分:1)
规范化会影响性能。然而,这并不是过早反规范化的理由。
从完全规范化开始,然后您将看到是否存在任何性能问题。按照您描述的速度(每天1000次更新/插入),我认为除非表格很大,否则您将遇到问题。
即使您可以使用大量数据库优化选项(索引,准备存储过程,物化视图......)。
答案 3 :(得分:1)
也许我在这里遗漏了一些东西。但是,如果您的体系结构要求您在单个查询中加入30到40个表格,则该查询的广告是您网站的主要用途,那么您就会遇到更大的问题。
我同意他人的意见,不要过早地优化您的网站。但是,您应该优化您的体系结构以考虑您的主要用例。对于超过50%的时间运行查询的40个表连接未优化IMO。
答案 4 :(得分:0)
不要进行早期优化。非规范化不是加速网站的唯一方法。您的缓存策略也非常重要,如果30-40个表的查询具有相当静态的数据,则缓存结果可能是更好的优化。
另外,请考虑写入次数的写入次数。如果您对每次插入或更新进行大约10次读取,则可以说数据是相当静态的,因此您应该将其缓存一段时间。
如果您最终对模式进行非规范化处理,那么您的写入也会变得更加昂贵并且可能会减慢速度。
在进行太多优化之前,真正分析您的问题,并等待系统中的瓶颈确实在哪里,因为您可能最终会对首先应该优化的内容感到惊讶。