多列主键与一个具有唯一约束的主键

时间:2015-03-09 11:08:58

标签: sql sql-server

我的数据库上有大表(50列,可能达到100,000,000行)。 现在我的主键是8列。

最好制作1个主键(自动编号)并添加列唯一约束?

2 个答案:

答案 0 :(得分:4)

我会投票结束你的问题,因为它太宽泛了。但是,您似乎对该网站不熟悉,只是关闭这个问题并不会有帮助。

数据库的结构应该由数据的使用方式驱动。你没有具体说明你在做什么数据,所以不可能说一种方式更好"或者"更糟糕"。例如,可以判断结构是标准化的还是非规范化的。但是这些方法中的每一种都适用于不同的情况。

也就是说,我非常偏向于在所有表中都有一个自动递增(" identity")主键。这在许多情况下都是有益的。原因有三:

  • 了解行的插入顺序(近似)。
  • 用于创建外键关系。
  • 确保您可以唯一标识每行以进行更新和删除。

但是,这样的列占用更多存储空间。并且,单个主键索引比具有多个索引更有效(空间方式)。

这不是您问题的直接答案,因为答案太模糊了。它至少为您提供了一些思考问题的参数。

答案 1 :(得分:0)

通常当您不知道更好时,最好遵循DB设计中的标准指南。因为它们适用于绝大多数情况,并且出错的可能性较小。

在这种情况下,这意味着您非常可能会从使用自动递增ID列作为聚簇主键索引中受益。除了将外键和非聚簇索引添加到所有引用列之外,如果还没有。

最后,您甚至可以考虑添加一些专门为您的最慢查询设计的自定义(甚至多列)索引...基本上,如果您有一些问题查询,您希望索引其WHERE子句中的列。 / p>

除此之外,您当然应该看到表和数据库通常是规范化的。要了解规范化,最好为Google进行规范化。这不是一个复杂或困难的概念,但有一千个教程比我们这里更适合解释这个概念。

通过这样做,您很可能会朝着正确的方向前进。如果它不起作用,那么这里的人们可以用更多的信息来确定最佳替代方案。