主键Vs Int的二进制数据类型?

Joh*_*ohn 7 sql-server sql-server-2008

使用主键的二进制数据类型是否存在性能(或其他)问题.该数据库具有大量使用这些密钥定期连接的大型表.索引是聚集的.我相信这些不能自动递增(作为Identity字段).

Seb*_*ine 9

在SQL Server中,主键默认也是聚簇索引的键.

主键本身只需要是唯一的而不是可空的.没有其他限制.

但聚簇索引键应尽可能短.在大多数情况下,不断增加的值也是优选的.原因是索引的深度直接受索引键长度的影响.对于任何索引类型都是如此.然而,聚簇索引键会自动附加到该表上的每个其他索引键,从而乘以长键的负面影响.这意味着在大多数情况下,INT IDENTITY是一个不错的选择.

如果您的主键是非群集的,那么保持简短并不重要.但是,您正在使用它进行连接.这意味着您可能在每个子表上都有一个关于此键的索引,因此再次将问题乘以.因此,自动增加的代理键可能是更好的选择.

对于许多情况(即使不是大多数情况)都是如此.但是,总有例外.您没有提供有关您的用例的大量信息,因此答案必须是一般性的.在确定要采用哪种方法之前,请确保使用实际数据测试环境中的读取和修改操作的性能.

最后一点,4字节BINARY和INT可能在性能上非常接近.如果不以递增的二进制排序方式创建值,您可能会看到差异.这可能会导致插入操作期间的页面拆分,从而影响您的写入性能.