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