sql-server - 更改 SQL Server 中的非聚集索引以添加更多包含的列

标签 sql-server indexing database-performance

是否可以更改现有的非聚集索引以包含更多列作为覆盖列的一部分。

例如

ALTER INDEX IX_NC_TableName_ColumnName
FOR TableName(ColumnName)
INCLUDE(Col1, Col2, Col3)

想要在上述索引中包含 Col4

添加此列会产生什么影响?会不会出现碎片或者其他什么情况?

最佳答案

额外包含的列的成本将是增加存储和潜在的碎片。与旧索引相比,由于叶节点大小增加(假设键不是增量)并且更新新包含列会增加长度,碎片将略有增加。

考虑使用 CREATE INDEX...WITH DROP EXISTING 来执行此任务。这将避免删除旧索引并避免排序,利用现有索引键序列进行重建:

CREATE INDEX IX_NC_TableName_ColumnName
ON TableName(ColumnName)
INCLUDE(Col1, Col2, Col3, Col4)
WITH(DROP_EXISTING = ON);

关于sql-server - 更改 SQL Server 中的非聚集索引以添加更多包含的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29942756/

相关文章:

sql-server - 存储过程中 IN 运算符导致数据类型 nvarchar 转换为 bigint 时出错

sql - 从 SQL Server 中没有公共(public)字段进行连接的两个表中进行选择的正确方法

python - 多索引 pandas 系列中的 set_codes

mysql - 我遇到了数据库性能瓶颈,现在在哪里?

php - MySQL 运行多个查询以保持代码干燥,性能问题?

sql - 表 A 的 PK 被表 B 的 FK 引用。不能丢弃表 A 的 PK

sql-server - 每年获取库存余额

MySQL - 为什么不索引每个字段?

wpf - 如何在 WPF 中将 ItemsSource 的索引作为 CommandParameter 传递

c# - SQL Server 存储过程在网络集群中执行得更好吗?