我应该使用复合主键(聚集索引)还是代理键和辅助索引?

raogr8fs  于 2021-06-17  发布在  Mysql
关注(0)|答案(1)|浏览(449)

问题陈述
我有以下候选密钥

{Student Id, Entity Id, Action Id......}

我正在尝试决定是使用复合主键还是代理键(自动递增整数、时间戳或guid)。
研究与分析
我查了一些关于stackoverflow的问题和讨论,但没有得到一个明确的方向,具体到我的场景。
复合键应该是主键吗
复合主键或主代理键
下面是表的访问模式
写入操作
数据存储在这个表中,以响应web应用程序中的学生操作;i、 我们可以把它看作是捕捉不同实体上用户行为的时间序列数据。在一段时间内,我预计并发登录到web应用程序的学生数量将非常高(取决于学生群体对该产品的采用程度!)。因此,随着时间的推移,我期望并发写入的数量会越来越多,表的大小也会越来越大。
读取操作
每当学生登录到系统时,每个学生都可以访问该表,向他显示他过去行为的总体摘要。
计划进近
记住访问模式、表的预计大小和时间序列性质(事件!)对于这些数据,我更倾向于使用一个唯一的代理键(自动递增整数)和一个复合的辅助键来获得最佳的读写性能平衡。另一种选择是,创建复合主键并避免使用代理键。
你能验证我的方法吗?或者就我的方法的替代方案或改进给出你的建议吗?

vdgimpew

vdgimpew1#

从技术上讲,最好使用复合键。唯一的缺点是它不适合实体。
我的意思是 M:N 可能会随着时间的推移成为一个实体。它将获得列,并且它的单个行将被操作和引用,这对于复合键来说很复杂。
平原 M:N 另一边的表需要在引用列上有一个唯一的键,所以将它用作主键非常有意义。你把多余的 ID 列、序列和附加索引。

相关问题