Sql server Bigint与nvarchar非聚集索引:SQLServer2008

Sql server Bigint与nvarchar非聚集索引:SQLServer2008,sql-server,Sql Server,我有一个非常大的表,大多数查询都使用WHERE子句来过滤包含ID号的列。不幸的是,此ID号存储为nvarchar(255)。重新转换为bigint(不适合作为int)是否有助于查询性能 注意-此ID值不是唯一的,因此无法分配主键。这是否意味着我不能在这里使用聚集索引?该表当前包含0个聚集索引。当然,占用8个字节的bigint要比使用所有255个字符的nvarchar(255)快得多,后者最多可能占用512个字节。根据Martin的评论,如果这个ID现在适合一个bigint,这意味着它不超过19位

我有一个非常大的表,大多数查询都使用WHERE子句来过滤包含ID号的列。不幸的是,此ID号存储为nvarchar(255)。重新转换为bigint(不适合作为int)是否有助于查询性能


注意-此ID值不是唯一的,因此无法分配主键。这是否意味着我不能在这里使用聚集索引?该表当前包含0个聚集索引。

当然,占用8个字节的
bigint
要比使用所有255个字符的
nvarchar(255)
快得多,后者最多可能占用512个字节。根据Martin的评论,如果这个ID现在适合一个
bigint
,这意味着它不超过19位数字(我猜你没有负ID),因此它实际上可能会占用多达40个字节(2+2*19)。更多关于这个


您可以在非唯一的字段上创建索引,即使是集群字段。关于这一点,您可能会发现这个问题很有用:

nvarchar(255)
最多占用512字节。实际上,存储
bigint
类型值最多的是
2+数据长度(N'-9223372036854775808')
这是
42
您所说的“重新转换为bigint”是什么意思?在运行时,或者(希望…)通过更改表定义?如果某个字段仅包含数值,则可以更改表定义,使该字段成为适当的数值类型。您应该始终使用Martin Smith,我的意思是更改表定义并更新所有现有值