为您提供数据库设计/性能专家。
我正在设计一个表,我可以选择使用int或nvarchar(128)作为列,假设空间不是问题。我的问题是哪个会带来性能
当我用int列搜索时
where ID = 12324
或者当我用nvarchar列搜索时(Key是整个值,所以我没有使用LIKE运算符)
where Key = 'my str'
我确信对于较小的数据集并不重要,但我们假设这些数据将在数百万行中。
答案 0 :(得分:20)
INT会更快 - 这就是原因:
因此,对于相同数量的索引条目,NVARCHAR(128)情况下将使用十倍的索引页。
加载和搜索这些索引页面将导致更多的I / O操作。
所以简而言之:如果可以,请始终使用INT。
答案 1 :(得分:9)
空间总是数据库中的问题。更宽的键意味着每页的条目更少,扫描更多页面以聚合和求和值,意味着更多的IO,更低的性能。对于聚簇索引,此问题会被每个非聚集索引乘以,因为它们必须在其叶子中重现查找键(聚簇键)。因此,nvarchar(128)
类型的键几乎总是比INT差。
另一方面,如果不合适,请不要使用INT密钥。始终使用适当的密钥考虑您的查询。如果您总是要通过nvarchar(128)列值进行查询,那么可能是一个好的聚簇候选键。如果你要通过nvarchar(128)密钥聚合,那么可能是一个好的聚类密钥候选者。
答案 2 :(得分:6)
与此相关的性能的主要问题是字段的大小 - int
是4个字节,而nvarchar(128)
将是254个字节。
所有这些都需要由SQL服务器管理,因此管理int
将比nvarchar(128)
快得多。
答案 3 :(得分:0)
我会将int用于性能(如果这将特别具有连接)并在数据完整性的潜在自然键上放置一个唯一索引。