我有一个表,其中 IDENTITY 列作为主键(经典 ID 列)。
SQL Server 自动为该主键创建聚集索引。
我的问题是:
- 我可以拥有一个包含更多列的唯一 CLUSTERED INDEX 组合吗?
如果是,如何删除默认的聚集索引并使用此属性重新创建一个新索引。
感谢您的支持
最佳答案
是的,每个表只能有一个聚集索引 - 数据按该索引物理排列,因此不能有多个。
但是我不建议使用复合聚集索引。为什么?因为聚集索引应该始终是:
- 尽可能小 - 4 字节的 INT 是完美的
- 稳定 - 永不改变,因此您的所有索引不会出现链式 react
- 唯一 - 否则,SQL Server 将不得不使用人工 4 字节值“唯一化”您的条目
- 最佳是:不断增加
INT IDENTITY 作为聚集索引是完美的 - 我建议您保持这种方式。
聚集索引列(或列集)也会添加到同一个表上每个非聚集索引的每个条目中 - 因此,如果您将聚集索引设置为较大的(20、50 字节或更多),您就可以开始浪费大量空间 - 磁盘上和服务器内存中,这通常会降低系统性能。
在此处阅读有关聚集索引的所有信息以及良好的聚集索引应该具备哪些内容:
关于sql-server - SQL Server 中的复合聚集索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3202086/