雪花胜于索引?

Lin*_* Ma 5 database performance data-warehouse snowflake-schema

这是问题所在,我有一个销售信息表,其中包含销售信息,该表具有类似(主键ID,产品名称,产品ID,商店名称,商店ID,销售日期)的列。我想进行分析,例如对商店/产品/销售日期进行深入研究。

我正在考虑两个设计选项,

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

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

预先感谢林

dka*_*ins 3

了解您的应用程序使用模式以及您想要优化的内容非常重要。以下是选择其中之一而不是其他的几个原因(众多原因之一)。

标准化雪花 PRO:

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

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

非规范化宽表 PRO:

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