YHTAN Asked: 2021-12-15 23:04:14 +0800 CST2021-12-15 23:04:14 +0800 CST 2021-12-15 23:04:14 +0800 CST 更改数据列大小导致警告“更改列数据类型导致索引太大”[重复] 772 我只更改列大小,为什么它的警告“更改列数据类型导致索引太大”? 这背后的概念是什么,有什么相关的文章让我理解吗? sql-server 1 个回答 Voted Best Answer J.D. 2021-12-16T04:25:44+08:002021-12-16T04:25:44+08:00 正如警告指出的那样,您在CityDesc名为的列上有一个索引CityDes。在 2016 年之前的任何 SQL Server 版本中,SQL Server中的索引限制为每行最多 900 个字节,对于聚集索引仍然只有900 个字节,对于 2016 版及更高版本的非聚集索引,最大为 1,700 个字节。 数据类型消耗的字节数是您在其中定义的长度的NVARCHAR两倍(大约)。当您的CityDesc字段只有NVARCHAR(300)长度 300 x 2 = 600 < 900 并且因此是可索引的。现在您尝试将长度增加到 500,并且 500 x 2 = 1,000 > 900 因此超出了索引大小限制,使其不再可索引,因此发出警告。 您的选择是继续进行更改,这将按照警告指定删除索引,或者为您的列选择较小的大小,例如NVARCHAR(400),然后将索引保持在原位。
正如警告指出的那样,您在
CityDesc
名为的列上有一个索引CityDes
。在 2016 年之前的任何 SQL Server 版本中,SQL Server中的索引限制为每行最多 900 个字节,对于聚集索引仍然只有900 个字节,对于 2016 版及更高版本的非聚集索引,最大为 1,700 个字节。数据类型消耗的字节数是您在其中定义的长度的
NVARCHAR
两倍(大约)。当您的CityDesc
字段只有NVARCHAR(300)
长度 300 x 2 = 600 < 900 并且因此是可索引的。现在您尝试将长度增加到 500,并且 500 x 2 = 1,000 > 900 因此超出了索引大小限制,使其不再可索引,因此发出警告。您的选择是继续进行更改,这将按照警告指定删除索引,或者为您的列选择较小的大小,例如
NVARCHAR(400)
,然后将索引保持在原位。