【发布时间】:2019-12-21 18:19:32
【问题描述】:
我们的团队正计划将缺失的维度键 (FK) 添加到我们的事实表中,以允许在我们的维度和事实表之间直接查询,而不是遍历表。本质上,更倾向于星型模式。这将提高查询性能(因为需要更少的连接)。
我在网上读到外键 (FK) 约束会影响插入、更新和删除的性能。
还有其他我们应该考虑的事情吗?
【问题讨论】:
标签: sql foreign-keys primary-key normalization star-schema
我们的团队正计划将缺失的维度键 (FK) 添加到我们的事实表中,以允许在我们的维度和事实表之间直接查询,而不是遍历表。本质上,更倾向于星型模式。这将提高查询性能(因为需要更少的连接)。
我在网上读到外键 (FK) 约束会影响插入、更新和删除的性能。
还有其他我们应该考虑的事情吗?
【问题讨论】:
标签: sql foreign-keys primary-key normalization star-schema
主要缺点是事实表记录的大小增加。您无需指定行的大小,但添加新的外键可能会显着影响行的大小。
在大多数数据库中,事实表中增加的行大小会减慢查询速度。但是,这在列式数据库中问题不大。
事实上,增加的大小可能超过避免连接的优势。
一般来说,我不会担心主键上的中小型维度表的连接。也就是说,在进行如此彻底的改变之前,对完整的数据进行大量测试。
对inserts 的影响仅仅是需要验证密钥。但是,这是针对引用表的主键进行检查,因此这些检查非常快。更多显然比更少更昂贵,但开销可能不会成为阻碍。
可能是优点或缺点的一件事是尺寸在输入时是静态的。更新事实表通常非常昂贵。但是,尺寸确实发生了变化。例如,偶尔会创建新的国家/地区。这在历史数据中是如何表示的?
在雪花模式中,您的最低地理级别(可能)会比国家/地区更精细,并且只需要更新维度。而且,如果需要更新事实表中的最低级别,那将影响相对较少的行。
【讨论】: