Sql 事实表中包含所有外键的优点/缺点是什么?
我们的团队正计划向事实表中添加缺少的维度键(FK),以允许在维度和事实表之间直接查询,而不是遍历表。本质上,更倾向于星型模式。这将提高查询性能(因为需要较少的联接) 我在网上读到外键(FK)约束将影响插入、更新和删除的性能Sql 事实表中包含所有外键的优点/缺点是什么?,sql,foreign-keys,primary-key,normalization,star-schema,Sql,Foreign Keys,Primary Key,Normalization,Star Schema,我们的团队正计划向事实表中添加缺少的维度键(FK),以允许在维度和事实表之间直接查询,而不是遍历表。本质上,更倾向于星型模式。这将提高查询性能(因为需要较少的联接) 我在网上读到外键(FK)约束将影响插入、更新和删除的性能 是否还有其他需要考虑的事情? 主要缺点是事实表记录的大小增加了。您不指定行的大小,但添加新外键可能会显著影响行的大小 在大多数数据库中,事实表中增加行大小会减慢查询速度。然而,在一个专栏数据库中,这并不是一个问题 事实上,增加的大小可能会超过避免连接的好处 通常,我不会担心主
是否还有其他需要考虑的事情?
主要缺点是事实表记录的大小增加了。您不指定行的大小,但添加新外键可能会显著影响行的大小
在大多数数据库中,事实表中增加行大小会减慢查询速度。然而,在一个专栏数据库中,这并不是一个问题 事实上,增加的大小可能会超过避免连接的好处 通常,我不会担心主键上的中小型维度表上的联接。也就是说,在进行这种根本性的更改之前,对全面数据进行大量测试 对insert
s的影响只是需要验证密钥。但是,这是针对引用表的主键进行检查,因此这些检查非常快。“多”显然比“少”更贵,但开销可能不会阻碍演出
有一件事可能是有利的,也可能是不利的,那就是维度在输入时是静态的。更新事实表通常相当昂贵。然而,维度确实会发生变化。例如,偶尔会创建新的国家。这在历史数据中是如何表示的
在雪花模式中,您的最低地理级别(可能)比一个国家更精细,并且只需要更新维度。而且,如果事实表中的最低级别需要更新,则会影响相对较少的行。感谢Gordon,这里我将介绍一些非常有见地的观点:)