非规范化对性能有益

时间:2012-03-01 13:22:07

标签: sql denormalization

首先抱歉我的英语。

我正在开发一个包含大约一百万条记录的数据库。有10个表,所有表都使用外键连接。因此,假设我保存记录的实体是人。所以在1表中我在其他表中有人员详细信息我有他的工作信息等。我的意思是说我的数据库现在非常正常化。要获取数据,我正在运行包含多个连接的查询,并且我在正常时间获取数据。但是我在一些论坛/技术博客上看到,如果我们只想选择数据,那么非规范化数据库可以显着提高性能。我尝试用我自己的数据库做这个,然后我创建了一个列“denormal_data”。在使用它的同时,我意识到我的表格变得更大了,现在它包含了超过50列。好吗 ?我真的需要一个非规范化的数据库表吗?这是一个好习惯吗?

那么它最有可能是一般性讨论,然后是任何类型的问题,仅用于学习目的。任何类型的专家建议都将受到高度赞赏。

由于

4 个答案:

答案 0 :(得分:4)

我在网上看到服用某些药片可以提高我与女士的机会,但我不相信我读过的所有内容。你也不应该。

规范化是一件好事 - 在你耗尽所有其他途径以获得更好的表现之前,不要扔掉它。

所有表格都应该有主键。

所有外键都应该有索引;所以WHERE子句中的所有列都应该这样。

如今,一百万条记录不是一个大型数据库,除非您使用的是用于单用户桌面应用程序的Access。

您应该在所有查询中解析计划,看看他们的表现如何。

如果没有先得到一些有意义的数据,我不会改变任何事情。除非你有一个良好的基线,否则你不会知道你是否真的有问题或治愈是否有效。

答案 1 :(得分:0)

事实上,当需要计算大量数据时,对非规范化很有用。例如,在论坛中,我们使用一个名为“message_number”或“topic_length”的列,以避免在性能上真正贪婪的“计数”功能。

我认为有很多方法可以通过非规范化来提高数据库的性能,但是你必须要做到这一点。

答案 2 :(得分:0)

非规范化是您需要时可以使用的策略。当您需要时,当数据库性能对您的应用程序产生负面影响 AND 时,您已经尝试了所有更简单的技巧(索引等)。非规范化不是免费的。你必须手工完成,否则你不需要(例如你想更新用户的电子邮件地址?在它出现的所有5个表中都这样做)。

tl; dr:仅在您需要时使用它。你可能不需要它。

答案 3 :(得分:0)

如果要使用非规范化,请创建第二组表,这些表可以正常同步,其中包含您希望以非规范化格式快速访问的数据。它将是陈旧的数据(但是在刷新之后它不是正确的吗?),你应该指出它的年龄。

您可能还想查看术语CQRS