5

这是问题所在,我有一个包含销售信息的销售信息表,其中包含(主键 ID、产品名称、产品 ID、商店名称、商店 ID、销售日期)等列。我想做分析,比如向上钻取和向下钻取商店/产品/销售日期。

我正在考虑两种设计方案,

  1. 在产品名称、产品 ID、商店名称、商店 ID、销售日期等列上创建单独的索引;
  2. 使用数据仓库雪花模型,将当前销售信息表作为事实表,创建产品、店铺、销售日期维度表。

为了有更好的分析性能,听说雪花模型更好。但是为什么从数据库设计的角度来看它比相关列上的索引更好呢?

提前谢谢, 林

4

1 回答 1

3

了解您的应用程序使用模式以及您想要优化的内容很重要。以下是选择其中一个的几个原因(其中有很多)。

标准化雪花 PRO:

更快的查询和更低的磁盘和内存要求。由于每个规范化的行只有短键而不是较长的文本字段,因此您的主事实表变得更小。即使使用了索引(除非查询可以由索引本身直接回答),通常也需要进行部分表扫描,较小的数据意味着更少的磁盘读取和更快的访问。

更容易修改和更好的数据完整性。假设一家商店更改了名称。在雪花中,您更改一行,而在大型非规范化表中,每次出现时都必须更改它,并且您经常会遇到拼写错误和同名的多个变体。

非规范化宽表 PRO:

更快的单条记录加载。当您通常只加载一条记录或少量记录时,将所有数据放在一行中只会导致一次缓存未命中或磁盘读取,而在雪花中,数据库可能必须从不同磁盘中的多个表中读取地点。这更像是 NoSQL 数据库如何存储与键关联的“对象”。

于 2013-01-13T04:38:16.327 回答