在什么时候成为标准化 vs. 明星有助于表现?
At what point does becoming normalized vs. star help performance?
假设我有一个订购系统,其 table 大小约为 50,000 行,并且每天增长约 100 行。另外,假设下订单后,我需要在接下来的 30 天内存储有关该订单的指标,并每天报告这些指标(即在第 2 天,该订单有 X 次激活和 Y 次停用)。
- 1 table 称为产品,其中包含产品列表的详细信息
- 1 table 个调用的订单,其中包含订单数据和产品 ID
- 1 table 称为 metrics,它包含一个日期字段、订单 ID 和相关的 metrics。
如果我以星型模式格式对此进行建模,我会这样设计:
- FactOrders table,它有 30 天 * X 订单行并存储围绕订单、产品 ID 和指标的所有元数据(每行代表特定日期的产品指标)。
- DimProducts table,存储产品元数据
我从一个巨大的 FactOrders table 中获得的性能提升是否仅需要一个连接来获取所有相关信息超过了我将 table 大小增加了 30 倍并且拥有大量重复数据这一事实,与具有一个额外连接但更小 tables 的真正规范化模型相比?还是我为星型模式格式设计的不正确?
不要为了摆脱连接而对这么小的东西进行反规范化。而是正确索引。加入不错,加入很好。数据库旨在使用它们。
非规范化对数据完整性存在风险,并且由于表的大小要大得多,甚至可能不会更快。在这么小的表中,非规范化不太可能有帮助。
假设我有一个订购系统,其 table 大小约为 50,000 行,并且每天增长约 100 行。另外,假设下订单后,我需要在接下来的 30 天内存储有关该订单的指标,并每天报告这些指标(即在第 2 天,该订单有 X 次激活和 Y 次停用)。
- 1 table 称为产品,其中包含产品列表的详细信息
- 1 table 个调用的订单,其中包含订单数据和产品 ID
- 1 table 称为 metrics,它包含一个日期字段、订单 ID 和相关的 metrics。
如果我以星型模式格式对此进行建模,我会这样设计:
- FactOrders table,它有 30 天 * X 订单行并存储围绕订单、产品 ID 和指标的所有元数据(每行代表特定日期的产品指标)。
- DimProducts table,存储产品元数据
我从一个巨大的 FactOrders table 中获得的性能提升是否仅需要一个连接来获取所有相关信息超过了我将 table 大小增加了 30 倍并且拥有大量重复数据这一事实,与具有一个额外连接但更小 tables 的真正规范化模型相比?还是我为星型模式格式设计的不正确?
不要为了摆脱连接而对这么小的东西进行反规范化。而是正确索引。加入不错,加入很好。数据库旨在使用它们。
非规范化对数据完整性存在风险,并且由于表的大小要大得多,甚至可能不会更快。在这么小的表中,非规范化不太可能有帮助。