SQL Server中的复合聚簇索引

时间:2010-07-08 09:12:37

标签: sql-server database-design composite-index

我有一张表,其中IDENTITY列为主键(经典ID列)。

SQL Server自动为该主键创建聚簇索引。

我的问题是:

  • 我可以只拥有一个CLUSTERED INDEX复合材料,其中包含更多列吗?

如果是,我如何删除默认的聚簇索引并重新创建具有此属性的新索引。

感谢您的支持

1 个答案:

答案 0 :(得分:18)

是的,每个表只能有一个聚簇索引 - 数据是由该索引物理排列的,所以你不能有多个索引。

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

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

INT IDENTITY非常适合作为聚集索引 - 我建议你保持这种方式。

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

阅读所有关于聚集索引以及它们应该是什么样的好聚簇索引: