在sql server中删除/禁用索引更好

Sam*_*Sam 12 indexing sql-server-2008

我正在编写这个SQL Server中更改数据类型列的后续内容

我之前的问题是,如果我需要删除所有索引和约束,它已得到解答我需要删除它们.

因此,当我在这个主题上网时,我遇到了一些帖子说更好地禁用和启用索引,而不是删除并重新创建它们.

那么哪种方式更好呢?禁用索引是否也允许您更改列的数据类型?两者有什么区别?

删除和创建索引的声明

DROP INDEX UX_1_COMPUTATION ON  dbo.Computation 

ALTER TABLE dbo.Computation
ALTER COLUMN ComputationID NVARCHAR(25) not null

CREATE UNIQUE INDEX UX_1_COMPUTATION ON dbo.Computation (ComputationID);
Run Code Online (Sandbox Code Playgroud)

具有禁用和启用索引的声明

ALTER INDEX [UX_1_COMPUTATION ] ON  dbo.Computation DISABLE

ALTER TABLE dbo.Computation
ALTER COLUMN ComputationID NVARCHAR(25) not null

ALTER INDEX [UX_1_COMPUTATION ] ON dbo.Computation REBUILD;
Run Code Online (Sandbox Code Playgroud)

Sta*_*ser 6

禁用索引是否也允许您更改列的数据类型?

它基于您选择的索引类型.禁用表上的聚簇索引时,无法修改列数据类型.如果您的索引是非聚集索引,那么您可以.

两者有什么区别?

禁用和删除索引的最大区别在于元数据和统计信息是否保持不变.如果禁用,他们是.如果掉线,他们不是.在执行任一操作之前,请确保仔细权衡您的选项,并始终可以重新创建可用的索引.

这是更好的方式吗?

在你的情况下,我建议删除并重新创建索引.