Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2008 删除/禁用索引在sql server中更好_Sql Server 2008_Indexing - Fatal编程技术网

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

Sql server 2008 删除/禁用索引在sql server中更好,sql-server-2008,indexing,Sql Server 2008,Indexing,我写这篇文章是对 我之前的问题是,如果我需要删除所有索引和约束,并且得到了回答,那么我确实需要删除它们 所以,当我在网上浏览这个话题时,我遇到了一些帖子,上面说最好禁用和启用索引,而不是删除和重新创建索引 那么,哪种方法更好呢?禁用索引是否也允许您更改列的数据类型?两者的区别是什么 具有删除和创建索引的语句 DROP INDEX UX_1_COMPUTATION ON dbo.Computation ALTER TABLE dbo.Computation ALTER COLUMN Comp

我写这篇文章是对

我之前的问题是,如果我需要删除所有索引和约束,并且得到了回答,那么我确实需要删除它们

所以,当我在网上浏览这个话题时,我遇到了一些帖子,上面说最好禁用和启用索引,而不是删除和重新创建索引

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

具有删除和创建索引的语句

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);
具有禁用和启用索引的语句

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;
禁用索引是否也允许您更改列的数据类型

它基于您选择的索引类型。当表上的聚集索引被禁用时,不能修改列数据类型。如果索引是非聚集索引,则可以

两者的区别是什么

禁用和删除索引之间的最大区别在于元数据和统计信息是否持久化。如果禁用,则会禁用。如果被丢弃,它们就不会被丢弃。确保在执行任何一项操作之前仔细权衡您的选项,并始终有办法重新创建可用的索引

哪种方法更好


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

您运行了测试脚本吗?您还可以查看文档,它告诉您在索引中使用了什么,以及使用了什么。希望很明显,禁用某些内容和删除(删除)它之间是有区别的。@Pondlife感谢您提供的信息。您能否说明为什么选择删除非聚集索引,而不是禁用它?