我很清楚,如果我使用 nvarchar
字段作为主键,或者作为外键,这将增加一些时间和空间开销,以使用生成的索引大多数(如果不是全部)情况。
一般来说,使用数字键是个好主意,但在某些常见情况下(例如小数据集),使用基于文本的键不是问题。
但是,我想知道是否有人可以提供严格的信息,说明在某些情况下使用文本作为数据库键是否比数字值更有效,或者至少相等。
考虑一个表包含一个简短的记录列表的情况。对于我们的示例,我们假设需要 50 条记录。每条记录都需要一个 ID。您可以使用通用 int
(甚至 smallint
)数字(例如 [1...50]
)或者您可以分配有意义的 2字符值到 char(2)
字段(例如 [AL, AK, AZ, AR, ... WI]
)。
在上述情况下,我们可以假设使用 char(2)
字段可能比使用 int
键更有效,因为 char 数据是 2 个字节, 与 int 一起使用的 4 字节。使用 smallint
字段 理论上 与 char(2)
字段一样高效,并且可能与 varchar(2)
字段。
使用基于文本的键而不是数字键的好处是值是可读的,这对许多人来说应该很明显我的 50 条记录列表很可能是美国各州的列表,
如前所述,使用大小小于或等于可比数字键的键应该具有相似的效率。但是,根据数据库引擎的架构和设计,实际使用中可能会产生意想不到的结果。
话虽如此,在 SQL Server 中使用任何形式的基于文本的值作为键的效率是更高、相等还是更低?
我不需要过于彻底的研究结果(尽管我不介意),但我正在寻找一个答案,它超出了我们对数据库的期望。
毫无疑问,随着文本键大小的增加/减小,基于文本的键的效率与基于数字的键相比如何?
最佳答案
在大多数情况下,由业务需求(用例)驱动的考虑因素将远远超过数字键与文本键之间的任何性能差异。除非您正在寻找非常大和/或非常高吞吐量的系统,否则您对主键类型的选择应该基于键的使用方式,而不是您将在数字键和文本键之间看到的任何微小的性能差异。
关于sql-server - 短文本数据库键与数字键;什么时候比另一个更有效率?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36155013/