使用 nvarchar 作为外键怎么样?

Posted

技术标签:

【中文标题】使用 nvarchar 作为外键怎么样?【英文标题】:What about using a nvarchar as a foreign key? 【发布时间】:2014-02-26 05:21:31 【问题描述】:

到目前为止,我的外键一直是唯一标识符或整数。

如果我使用 nvarchar 字段作为外键,它会对性能产生负面影响吗?还有其他需要注意的事项吗?

【问题讨论】:

this 相关吗? @AmitAgrawal nvarchar 可以是外键 是的,它会对性能产生不利影响 - 因为 varchar 的潜在大小以及它是可变长度的事实。另外:由于您正在比较一个字符串,您可能会遇到(a)拼写和(b)大小写字母的问题(如果您的排序规则有时区分大小写,有时不区分大小写)。总而言之 - 你可以使用 varchar 作为 FK - 但如果可能的话,我建议不要这样做 【参考方案1】:

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

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

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

你也可以使用存储过程sp_spaceused来检查使用的空间,将列作为int和nvarchar,你会发现不同的。

EXEC sp_spaceused 'TableName'

【讨论】:

以上是关于使用 nvarchar 作为外键怎么样?的主要内容,如果未能解决你的问题,请参考以下文章

SQL怎么写将表中的字段设置为主键后,由该表的另外一个字段作为外键.

外键上的实体框架nvarchar案例敏感性

外键为啥必须是唯一键?为啥至少唯一键才能作为其他表的外键?不唯一为啥不可以?

mybatis 先插入主表数据,获得自增主键。然后作为从表的外键插入从表数据怎么做

sql 里面怎么将nvarchar转换成float

EntityFramework db.where()查询符合条件数据主键的外键的外键 在括号里怎么写