sql-server - SQL Server 中的复合聚集索引

标签 sql-server database-design composite-index

我有一个表,其中 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/

相关文章:

sql - 对于将被连接、 "LIKE' d"并进行大量查询的文本字段,我应该使用什么 SQL Server 数据类型?

sql-server - SQL Server : splitting the results of GROUP BY into a separate columns

mysql - 如何在 MySQL 数据库中存储电话号码?

mysql - 在具有相同值的多个实例的 SQL 中选择随机

mysql - 综合指数

sql-server - 为什么我的更新查询实际上没有更新?

database - 用户为应用程序定义的数据模式

c# - 如何使用复合键索引集合

mysql - 按 id 排序的复合索引的并发查询速度非常慢

SQL Server - INSERT 后返回值