雪花比索引更好?

时间:2013-01-13 04:24:59

标签: database performance data-warehouse snowflake-schema

这是问题,我有一个销售信息表,其中包含销售信息,其中包含(主键ID,产品名称,产品ID,商店名称,商店ID,销售日期)等列。我想进行分析,例如向上钻取并深入了解商店/产品/销售日期。

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

  1. 在产品名称,产品ID,商店名称,商店ID,销售日期等列上创建单个索引;
  2. 使用数据仓库雪花模型,将当前销售信息表视为事实表,并创建产品,商店和销售日期维度表。
  3. 为了获得更好的分析性能,我听说雪花模型更好。但是为什么它比数据库设计角度的相关列索引更好呢?

    提前谢谢, 林

1 个答案:

答案 0 :(得分:3)

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

规范化雪花PRO:

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

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

非规范化宽表PRO:

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