9

使用 Binary 数据类型作为主键是否存在性能(或其他)问题。数据库有大量使用这些键定期连接的大型表。索引是聚集的。我相信这些不能自动增加(作为身份字段)。

4

1 回答 1

10

在 SQL Server 中,主键默认也是聚集索引的键。

主键本身只需要唯一且不可为空。没有其他限制。

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

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

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

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

于 2013-09-10T00:40:55.437 回答