将主键添加到具有现有聚簇索引的表

时间:2010-08-09 12:50:40

标签: sql-server-2008 primary-key clustered-index alter

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

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

所以知道了,我有两个问题。

  1. 这有什么好的理由吗?
  2. 有什么方法可以把它变成主键。
  3. 关于问题2

    创建新主键还会创建要与之关联的非聚集索引(已存在已存在的聚簇索引)。
    这是我在寻找什么。我希望保留相同的索引,但也要将其作为主键。

    • 有可能吗?
    • 再次创建整个索引会更快吗? (我希望如此)
    • 可能是什么后果? (锁定?崩溃?数据损坏?)

3 个答案:

答案 0 :(得分:2)

好问题。

如果您已经在非可空列上拥有唯一索引,那么您有一个候选键。我不知道将这个作为“官方”主键的任何特殊好处。事实上,我有一种感觉,即没有将其作为PK将提供更大的灵活性。

答案 1 :(得分:2)

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

答案 2 :(得分:1)

  1. 唯一索引可以允许null 值。主键不能。

  2. 我相信你不能将现有索引“标记”为主键。你必须放弃它并重新创建。为了避免这些问题,我会说在此之前将TABLOCKX, HOLDLOCK放在桌面上会很好。