6

我必须使用数据库来进行报告数据库很大:416 055 104 行虽然每行都很轻,只是布尔值和 int id。

每行由 3 列标识,但令我惊讶的是,上面没有主键。只有具有唯一约束的聚集索引。

所以知道这一点,我有两个问题。

  1. 有什么好的理由吗?
  2. 有什么办法可以把它变成主键。

关于问题 2

创建一个新的主键也会创建一个非聚集索引来关联(已经有一个现有的聚集索引)。
不是我要找的。我想保留相同的索引,但也将其设为主键。

  • 是否可以?
  • 再次创建整个索引会更快吗?(但愿如此)
  • 可能有什么后果?(锁?崩溃?损坏的数据?)
4

3 回答 3

2

好问题。

如果您已经在不可为空的列上有一个唯一索引,那么您就有一个候选键。我不知道将其设为“官方”主键有什么特别的好处。其实我有一种感觉,不做PK会提供更大的灵活性。

于 2010-08-09T13:24:28.717 回答
2

PRIMARY KEY 和不可为空列上的 UNIQUE 约束之间几乎没有区别。因此,如果有问题的列不可为空,那么我建议您什么也不做。将候选键设为主键的主要原因是,如果您有一些软件(例如数据建模工具或其他开发工具)期望使用 PRIMARY KEY 约束来标识该键。

于 2010-08-09T18:25:31.227 回答
1
  1. 唯一索引可以允许空值。主键不能。

  2. 我相信您不能将现有索引“标记”为主键。您必须删除它并重新创建。为避免出现问题,我会说TABLOCKX, HOLDLOCK在这样做之前将 a 放在桌子上会很好。

于 2010-08-09T13:13:19.177 回答