sql-server - 短文本数据库键与数字键;什么时候比另一个更有效率?

标签 sql-server database indexing primary-key

我很清楚,如果我使用 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/

相关文章:

c# - ConnectString 在 C# 中不起作用

python - 从数据帧中查找字符串内的子字符串索引

sql-server - 仅根据一个字段选择与先前记录相比发生更改的记录

database - 如何找出不同数据库中的两个表之间的差异

MySQL - 正则表达式搜索在找到匹配行时正常工作,否则不正常

sql - 如果值与之前的行匹配,PostgreSQL 会减少行

oracle - 仅为 Oracle 10g 中的查询创建索引

mysql - MySQL 中没有文件排序的表中可以有 TEXT/BLOB 列吗?

c# - SQL 服务器的连接超时

sql - 根据参数动态打开/关闭 WHERE bool 表达式