为了纯粹的效率,使用 Int 作为主键会更好,因为它支持在机器代码级别比较 Int。使用在数据库级别实现的算法来比较字符串。除非您的字符串很短,否则整数键在页面上占用的空间也会更少(db 页面)。
更新:根据板上的其他答案,我不确定我是否正确理解了您的问题。您是否在问与字符串相比,使用整数作为键是否更好(可以选择其中任何一个)?还是您在问您的 C# 类型是否应该与您的数据库类型匹配?我假设是前者……如果是后者,我会感到非常惊讶——我认为他的答案是显而易见的。
更新: Lieven 现在澄清了他的要求,说他实际上是在询问 Int 或 nchar 字段作为索引是否会更好,所以我最初对这个问题的看法是正确的。
为了补充我的回答,Lieven,将 Int 作为您的 PK 几乎总是更好。例外情况是存在可以作为短字符串捕获的自然键(例如,在“项目”条目是字符字符串的会计系统中)。原因有三方面。
首先,整数表示为本机机器类型(32 位或 64 位字)并通过机器本机操作进行操作,而字符串不是,但必须使用逐字符的方法进行比较。因此,例如,当遍历 PK 索引(通常是 BTree 的某种变体)来定位记录时,每个节点的比较操作是单个操作。这是一件大事吗?除非您正在处理真正庞大的数据库或事务负载,否则可能不会。如果你有一个自然的字符键,那么一定要使用它!但是,如果您的“关键”是姓氏的前五个字母加上第一个首字母加上一个数字以使其唯一,那么使用 Int 字段显然要好得多。
其次,与几乎任何 char 键相比,整数只占用更少的空间(假设使用 Unicode 的 char(1) 除外)。而且它不仅仅是主表页面中的房间,请记住索引字段也在索引中表示。再说一次,这有什么大不了的吗?不是真的,除非您再次使用大型数据库。
最后,我们对键的选择通常会在其他地方产生影响。因此,例如,如果您将一张表的主键用作另一张表的外键,那么当您使用外键在表中插入或更新记录时,上述两种效果都会被放大。
总而言之:使用最自然的键。但是,如果您可以在 Int 和 Char 之间进行选择,并且两者本质上都是任意的,请选择 Int 而不是 Char。