这是问题所在,我有一个包含销售信息的销售信息表,其中包含(主键 ID、产品名称、产品 ID、商店名称、商店 ID、销售日期)等列。我想做分析,比如向上钻取和向下钻取商店/产品/销售日期。
我正在考虑两种设计方案,
- 在产品名称、产品 ID、商店名称、商店 ID、销售日期等列上创建单独的索引;
- 使用数据仓库雪花模型,将当前销售信息表作为事实表,创建产品、店铺、销售日期维度表。
为了有更好的分析性能,听说雪花模型更好。但是为什么从数据库设计的角度来看它比相关列上的索引更好呢?
提前谢谢, 林
这是问题所在,我有一个包含销售信息的销售信息表,其中包含(主键 ID、产品名称、产品 ID、商店名称、商店 ID、销售日期)等列。我想做分析,比如向上钻取和向下钻取商店/产品/销售日期。
我正在考虑两种设计方案,
为了有更好的分析性能,听说雪花模型更好。但是为什么从数据库设计的角度来看它比相关列上的索引更好呢?
提前谢谢, 林
了解您的应用程序使用模式以及您想要优化的内容很重要。以下是选择其中一个的几个原因(其中有很多)。
更快的查询和更低的磁盘和内存要求。由于每个规范化的行只有短键而不是较长的文本字段,因此您的主事实表变得更小。即使使用了索引(除非查询可以由索引本身直接回答),通常也需要进行部分表扫描,较小的数据意味着更少的磁盘读取和更快的访问。
更容易修改和更好的数据完整性。假设一家商店更改了名称。在雪花中,您更改一行,而在大型非规范化表中,每次出现时都必须更改它,并且您经常会遇到拼写错误和同名的多个变体。
更快的单条记录加载。当您通常只加载一条记录或少量记录时,将所有数据放在一行中只会导致一次缓存未命中或磁盘读取,而在雪花中,数据库可能必须从不同磁盘中的多个表中读取地点。这更像是 NoSQL 数据库如何存储与键关联的“对象”。