使用 char(17) 作为主键在 table 和 SQL 服务器中存储 VIN 号码如何影响性能?
How does using char(17) as primary key to store VIN numbers in a table with SQL Server affect performance?
我正在设计一个带有 table 的数据库来存储车辆,并且由于车辆识别号是一个 17 位字母数字序列号,我的想法是将其用作主键,数据类型为 char(17)
。
许多其他 table 将 VIN 作为外键。
许多 queries/searches 将 运行 将 VIN 编号作为参数,因为这是我们希望跟踪车辆以及与之相关的其他数据的方式。
VIN 号码永远不会改变,但我不确定它是否会导致任何严重的性能下降(或我不知道的其他并发症),因为有些查询会使用联接而其他查询则不会:/
通过使用 VIN 作为主键,我不必创建唯一约束/附加索引 - 但它必须是 char(17)
不同于 int
的数据类型,主键是据称优化...
我也不能 200% 确定的是,每个 VIN 号码的长度都相同(不太可能),但在那种情况下,使用 varchar(17)
会如何影响整个情况...如果有的话。
谢谢!
在我看来,关于性能,确实不是一个好主意。不过,这在很大程度上取决于您将在数据库中存储多少辆汽车。另一方面,如果您的应用程序和查询使用 VIN 作为参数,那么它是最佳选择,因为该列已编入索引并且必须是唯一的。
希望这个帮助ps
ps: 很遗憾看到其他人对此主题的建议!
个人看法..
我总是使用 int 作为主键。在大多数情况下,主键始终是聚集索引。它是 4 个字节对 17 个字节,您始终可以在 VIN 列上放置一个非聚集索引。让事情简单明了。不过这只是我的意见。
我正在设计一个带有 table 的数据库来存储车辆,并且由于车辆识别号是一个 17 位字母数字序列号,我的想法是将其用作主键,数据类型为 char(17)
。
许多其他 table 将 VIN 作为外键。
许多 queries/searches 将 运行 将 VIN 编号作为参数,因为这是我们希望跟踪车辆以及与之相关的其他数据的方式。
VIN 号码永远不会改变,但我不确定它是否会导致任何严重的性能下降(或我不知道的其他并发症),因为有些查询会使用联接而其他查询则不会:/
通过使用 VIN 作为主键,我不必创建唯一约束/附加索引 - 但它必须是 char(17)
不同于 int
的数据类型,主键是据称优化...
我也不能 200% 确定的是,每个 VIN 号码的长度都相同(不太可能),但在那种情况下,使用 varchar(17)
会如何影响整个情况...如果有的话。
谢谢!
在我看来,关于性能,确实不是一个好主意。不过,这在很大程度上取决于您将在数据库中存储多少辆汽车。另一方面,如果您的应用程序和查询使用 VIN 作为参数,那么它是最佳选择,因为该列已编入索引并且必须是唯一的。
希望这个帮助ps
ps: 很遗憾看到其他人对此主题的建议!
个人看法..
我总是使用 int 作为主键。在大多数情况下,主键始终是聚集索引。它是 4 个字节对 17 个字节,您始终可以在 VIN 列上放置一个非聚集索引。让事情简单明了。不过这只是我的意见。