在SQL Server中增加NVARCHAR列大小是否会导致索引重建?

在SQL Server中增加NVARCHAR列大小是否会导致索引重建?,sql,sql-server,sql-server-2008,sql-server-2005,ddl,Sql,Sql Server,Sql Server 2008,Sql Server 2005,Ddl,我有一个数据库表,其中包含数百万行的客户数据,需要将lastname字段从NVARCHAR(32)修改为NVARCHAR(50)。字段上有索引(非聚集)。我需要知道使用ALTERTABLEALTERCOLUMN语句进行此更改是否会自动重建索引 如果是这样的话,我认为这需要相当长的时间。我们在生产中的升级过程是通过运行脚本的已发布安装程序完成的,我们需要给出升级需要多长时间的预期。我们在SQL2005和2008上都有相当大的DBs在生产中,所以如果两者不同,我需要知道它们的答案 我知道增加列的大小

我有一个数据库表,其中包含数百万行的客户数据,需要将lastname字段从NVARCHAR(32)修改为NVARCHAR(50)。字段上有索引(非聚集)。我需要知道使用ALTERTABLEALTERCOLUMN语句进行此更改是否会自动重建索引

如果是这样的话,我认为这需要相当长的时间。我们在生产中的升级过程是通过运行脚本的已发布安装程序完成的,我们需要给出升级需要多长时间的预期。我们在SQL2005和2008上都有相当大的DBs在生产中,所以如果两者不同,我需要知道它们的答案

我知道增加列的大小不应该修改可变长度字段(如NVARCHAR)中的数据,而且应该非常快,即使在没有索引的情况下,在大型数据集上也是如此。我不清楚的是,索引是否会导致速度慢得多

我在下面的链接中阅读了文档,但它实际上只是表明您可以使用现有索引进行更改,并且没有指定可能对ALTER TABLE语句的执行时间产生的影响,或者是否必须在以后重新生成索引,或者是否自动执行索引,等等

下面链接上的问题实际上与我在这里问的几乎相同,但在另一篇帖子上没有令人满意的答案,所以我想我应该尝试一篇新的帖子

请让我知道,如果你有这方面的经验。如果我能用一个相当大的数据库建立一个测试系统,在那里我可以进行实验,我会发布结果


谢谢

否-在SQL Server中永远不会自动重新生成索引,即使您更改了列大小,如前面提到的nvarchar列。索引会自动维护,但不会重新生成。如果设置了DB选项“自动更新统计信息”,则数据的统计信息/内部直方图可能会自动更新

我认为,如果您所做的只是增加索引的大小,那么就不需要重建索引。除非您现在增加大小并在表中设置
NULL
s,并将定义更改为
NOT NULL
,并添加一个大于旧大小的默认值,否则不会更改任何行,因此索引中的数据也不会更改。但是您当然可以在不创建“相当大的DB”的情况下测试它……好的,很酷。你提到的这些事情都不适用于我的情况;在需要修改的列上未定义非空约束或默认值。我想我要做的就是创建两个表,每个表都有一个VARCHAR(50)列,可以用一个简单的脚本填充该列,以确定语句执行时间是否受到影响。我可以在一个表上放置索引,而在另一个表上不放置索引,以及当每个表的列具有相同的数据且唯一的区别是索引时,将它们更改为VARCHAR(100)所需的时间。在更改前后查询sys.dm_db_index_physical_stats也可能显示是否进行了重大更改。