主键理论 & I/O 效率

Primary Key Theory & I/O Efficiency

根据 RSBMS 理论,在选择主键时,我们应该在最少的超级键中进行选择,从而有效地优化我们的键选择 w.r.t 列数。

为什么我们对优化列数而不是字节数感兴趣?较小的字节大小 PK 不会导致较小的索引表和总体上 read/write 更高效的查询吗?例如,选择由 2 个 varchar(16) 而不是 1 个 varchar(64) 组成的 PK。

我想我同意你的看法。

我认为理论无法解释物理存储。

是的,例如,如果您创建的列是两个小列的 SHA256,比如 VARCHAR(16),那么是的,索引中 B 树的节点将占用更多 space,索引不会比索引两个 16 字节的列快。

构建与第一列匹配的索引会降低效率,必须切换到第二列的比较。如果整个 b 节点在同一列上进行比较,则 b 节点效率更高。

老实说,我认为这两者在效率上并没有太大差异。我认为该声明是不考虑存储大小的 RDBMS 理论。

在数据库中定义键时,识别最小而不是非最小超级键非常重要。如果您选择在 A、B、C 三列上强制唯一性,那么这与仅在 A、B 两列上强制唯一性有很大不同。 A、B、C 的唯一性约束不能保证 A、B 的唯一性——因此 A、B 不再是超级键。另一方面,如果唯一性约束在 A、B 上,则 A、B、C 也是超级键。因此,从数据完整性的角度来看,了解不可约的超级密钥集是什么是至关重要的。

这与主键本身无关,因为 所有 键必须是最小的,而不仅仅是您选择称为主键的那个。存储大小和性能是另一回事。内部存储是索引设计中的一个重要考虑因素,但大小和性能是非功能性要求,而键则全都与逻辑和功能有关。