如何加快创建聚集索引的速度

2024-03-24

在 SQL Server 中,如果我想向聚簇索引定义添加一新列,则没有用于更改聚簇索引的选项。唯一的选择是删除并使用新定义创建簇索引。

据我了解,对于大容量表来说,删除和创建簇索引是非常昂贵且耗时的。

聚集索引创建会重建表上的所有非聚集索引,这可能非常昂贵。

本论坛的问题“我们是否可以加快簇索引重新创建的速度”

我能想到的一种解决方法是在重新创建集群索引之前删除所有非集群索引。这种方法行得通吗?


Use

CREATE .... WITH (DROP_EXISTING = ON)

代替

DROP ... 
CREATE ...

这意味着非聚集索引只需更新一次(以包含新的键列)。不是两次 - 首先使用物理删除,然后再次使用新的 CI 密钥。

The DROP_EXISTING http://sqlmag.com/database-high-availability/use-create-indexs-dropexisting-clause-when-recreating-clustered-index该子句告诉 SQL Server 现有的聚集索引将被删除,但将添加一个新的索引来代替它,让 SQL Server 推迟更新非聚集索引,直到新的聚集索引就位。

此外,如果聚集索引键未更改且定义为 UNIQUE,则 SQL Server 根本不会重建非聚集索引,这并不是将聚集索引定义为 UNIQUE 带来的明显性能优势

Example

CREATE TABLE #T
(
A INT,
B INT,
C INT
)

CREATE CLUSTERED INDEX IX ON #T(A)

CREATE CLUSTERED INDEX IX ON #T(A,B) WITH (DROP_EXISTING = ON)

DROP TABLE #T
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何加快创建聚集索引的速度 的相关文章

随机推荐