BUCKET_COUNT的SQL Server内存中OLTP哈希索引设置值

Ale*_*kov 5 sql t-sql sql-server sql-server-2014

在内存优化表中创建哈希索引时,我可以设置变量的值 BUCKET_COUNT

CREATE TABLE [Table1] (
[Id] INT NOT NULL IDENTITY(1,1) PRIMARY KEY NONCLUSTERED HASH 
                                WITH (BUCKET_COUNT = 1000000),
[Name] NVARCHAR(100) NOT NULL
) 
WITH (MEMORY_OPTIMIZED = ON, DURABILITY = SCHEMA_AND_DATA);
Run Code Online (Sandbox Code Playgroud)

该变量的最佳值是多少?

Luk*_*zda 3

根据确定哈希索引的正确存储桶计数

在大多数情况下,存储桶计数应介于索引键中不同值数量的 1 到 2 倍之间。如果索引键包含大量重复值,平均每个索引键值超过 10 行,请改用非聚集索引

您可能并不总是能够预测特定索引键可能具有或将具有多少个值。如果 BUCKET_COUNT 值在实际键值数量的 5 倍以内,性能应该是可以接受的。

和:

主键和唯一索引

由于主键索引是唯一的,因此键中不同值的数量对应于表中的行数。