2014-02-26 21 views
6

直到现在我的外键一直是uniqueidentifiers或int。使用nvarchar作为外键怎么样?

如果我使用nvarchar字段作为外键,会对性能产生负面影响吗?是否还有其他我应该关注的事项?

+0

是[这](http://stackoverflow.com/questions/17469677/does-it-worth-switching-a-primary-key-from-the-type-nvarchar-to-the-type -int)相关? – Alexander

+1

@AmitAgrawal'nvarchar'可以是外键 – zzlalani

+0

是的,它会对性能产生负面影响 - 因为varchar的潜在大小和可变长度。另外:由于您正在比较字符串,因此您可能会遇到(a)拼写和(b)大写和小写字母(如果您的归类有时区分大小写,其他时间区分大小写)的问题。总而言之 - 你*可以*使用'varchar'作为FK - 但是如果可能的话,我会推荐它 –

回答

3

虽然你可以为nvarchar为外键,但我不建议你使用为nvarchar作为外键。有很多原因,我认为非常重要的一个原因是当你要JOIN时,nvarchar会比int慢。

如果我使用nvarchar字段作为外键,会对性能产生负面影响吗?

是肯定会有性能问题,因为一个int使用4字节的数据,并且通常比NVARCHAR更快。

您还可以通过采取列INT和nvarchar检查通过使用存储过程sp_spaceused使用的空间,你会发现差别。

EXEC sp_spaceused 'TableName'