是否存在使用主键的二进制数据类型的性能(或其他)问题。该数据库具有大量使用这些密钥定期连接的大型表。索引是聚集的。我相信这些不能自动递增(作为身份字段)。
答案 0 :(得分:9)
在SQL Server中,主键默认情况下也是聚簇索引的键。
主键本身只需要是唯一的而不是可空的。没有其他限制。
聚集索引键应尽可能短。在大多数情况下,不断增加的值也是优选的。原因是索引的深度直接受索引键长度的影响。对于任何索引类型都是如此。然而,聚簇索引键会自动附加到该表上的每个其他索引键,从而乘以长键的负面影响。这意味着在大多数情况下,INT IDENTITY是一个不错的选择。
如果您的主键是非群集的,那么保持简短并不重要。但是,您正在使用它进行连接。这意味着您可能在每个子表上都有一个关于此键的索引,因此再次将问题乘以。因此,自动增加的代理键可能是更好的选择。
如果不是大多数情况,这一切都是正确的。但是,总有例外。您没有提供有关您的用例的大量信息,因此答案必须是一般性的。在确定要采用哪种方式之前,请确保使用实际数据测试环境中的读取和修改操作的性能。
作为最后的评论,4字节的BINARY和INT可能在性能上非常接近。如果不以递增的二进制排序方式创建值,您可能会看到差异。这可能会导致插入操作期间的页面拆分,从而影响您的写入性能。