我有一个非常大的表,大多数查询使用WHERE子句来过滤包含ID号的列。不幸的是,这个ID号存储为nvarchar(255)。将重新强制转换为bigint(它不适合作为int)有助于查询性能吗?
注意 - 此ID值不唯一,因此无法分配主键。这是否意味着我不能在这里使用聚集索引?该表当前包含0个聚簇索引。
由于
答案 0 :(得分:3)
当然,占用8个字节的bigint
将比nvarchar(255)
快得多,如果您使用全部255个字符,则可能占用最多512个字节。根据Martin的评论,如果此ID现在适合bigint
,则表示它不超过19位(我猜你不会有负ID),所以它可能实际占用最多40个字节(2 + 2 * 19)。有关此here的更多信息。
您可以在不唯一的字段上创建索引,甚至是群集索引。关于这一点,您可能会发现这个问题很有用:Do clustered indexes have to be unique?