哈希索引

索引用作内存优化表的入口点。 从表中读取行需要索引才能在内存中查找数据。

哈希索引由数组中组织的存储桶集合组成。 哈希函数将索引键映射到哈希索引中的相应存储桶。 下图显示了三个索引键,这些键映射到哈希索引中的三个不同的存储桶。 为了说明目的,哈希函数名称为 f(x)。

映射到不同存储桶的索引键。

用于哈希索引的哈希函数具有以下特征:

  • SQL Server 具有一个用于所有哈希索引的哈希函数。

  • 哈希函数是确定性的。 同一索引键始终映射到哈希索引中的同一存储桶。

  • 多个索引键可以映射到同一个哈希存储桶。

  • 哈希函数是均衡的,这意味着索引键值在哈希桶上的分布通常遵循 Poisson 分布。

    泊松分布不是均匀分布。 索引键值不会均匀分布到哈希存储桶中。 例如,在 n 个哈希存储桶上分布 n 个不同的索引键会导致大约三分之一的空存储桶、包含一个索引键的存储桶的三分之一,另三分之一包含两个索引键。 少量存储桶将包含两个以上的键。

如果两个索引键映射到同一个哈希桶,则存在哈希冲突。 大量哈希冲突可能会对读取操作产生性能影响。

内存中哈希索引结构由内存指针数组组成。 每个桶对应于此数组中的一个偏移量。 数组中的每个存储桶指向该哈希存储桶中的第一行。 存储桶中的每个行指向下一行,从而生成每个哈希存储桶的行链,如下图所示。

内存中哈希索引结构。

该图包含三个包含行的存储桶。 顶部的第二个存储桶包含三个红色行。 第四个存储桶包含单个蓝色行。 底部存储桶包含绿色的两行。 这些可能是同一行的不同版本。

有关内存优化表的索引的详细信息,请参阅 有关对 Memory-Optimized 表使用索引的准则

另请参阅

Memory-Optimized 表上的索引