database - DB设计和性能:是否可以使用冗余FK来提高性能?

  显示原文与译文双语对照的内容
0 0

假设我有以下数据库结构:
Normalized DB structure
我的应用程序需要显示包含所有细节的文章列表。 因为我需要做更多的连接来获取需要的数据。

如果我通过将冗余FKs创建到文章表中,就可以提高应用程序的性能? 它真的会提高?
DB structure with redundant FKs

时间: 原作者:

0 0

如果你不希望在层次结构中检索任何数据,那么你可以用提高性能 。 这是一种常见的非规范化形式。 注意,你需要小心,不要让不一致的地方出现在。

我通常每天设置一个收费的任务来验证非规范化数据,发送错误给我,并自动修复这些错误。 这样做并不难,并消除了令人讨厌的Bug 类。

人们做的一个不同的原因是,在同一键上为所有的表分配

原作者:
0 0

找出设计的最佳方法是尝试使用它;第二个最好的方法是考虑运行的查询。 不知道你想运行什么查询,或者数据库的大小,很难知道你是否会看到性能改进。

在非常常见的术语中,除非你具有非常大的数据库( 假设你在正常的硬件上运行并且你已经调整了你的索引),否则你将看不到对性能的。 在"非常大"中,我认为在几个表中有数百万行。

如果你真的需要进行规范化,我的建议是创建一个显式非规范化表,而不是"污染"。 理解一个分为单独的"它应该是怎样"和"折中"的设计,而不是将两者混合在一起要容易得多。

为此,我将创建一个单独的表-"cached_articles",可能带有列:

article_id
...(article data)
model_id
....(model data)
family_id
...(family data)
brand_id
....(brand data)
producer_id
....(producer data)

你可以通过批处理作业或者触发器来维护该表。 只有当你需要应用程序代码写入规范化表时,才能在需要的时候从缓存表中读取。

你还应该构建一个健壮的"一致性检查"机制来识别可以能导致应用程序断开的数据问题。

原作者:
...