12

我有一个 IDENTITY 列作为主键(经典 ID 列)的表。

SQL Server 会自动为该主键创建一个聚集索引。

我的问题是:

  • 我可以只有一个包含更多列的 CLUSTERED INDEX 组合吗?

如果是,我怎样才能删除默认的聚集索引并重新创建一个具有此属性的新索引。

谢谢你的支持

4

1 回答 1

21

是的,每个表只能有一个聚集索引 - 数据是由该索引物理排列的,因此您不能拥有多个。

但是,我不建议使用复合聚集索引。为什么?因为聚集索引应该始终是:

  • 尽可能小 - 4 字节的 INT 是完美的
  • 稳定 - 永不改变,因此您的所有索引都不会出现涟漪更新
  • 唯一 - 否则,SQL Server 将不得不使用人工的 4 字节值“唯一”您的条目
  • 最佳的将是:不断增加

INT IDENTITY 作为聚集索引是完美的——我建议你保持这种状态。

聚集索引列(或列集)也被添加到同一张表上每个非聚集索引的每个条目中 - 因此,如果您将聚集索引设置为大,20、50 字节或更多,您就开始浪费了大量空间 - 在磁盘和服务器内存中,这通常会降低系统性能。

在此处阅读有关聚集索引的所有信息以及它们应该成为良好的聚集索引的内容:

于 2010-07-08T10:22:48.717 回答