当键值对被传递给散列函数时,在计算散列函数之后,根据结果将密钥值键值对放在适当的哈希桶(散列桶)中。

栗子

我们假设10模式(% 10)是一个散列函数。如果键值对的键为1525并传递给散列函数,那么1525将被存储在第五个桶中。

因为5等于1525% 10=5。

类似地,537个将被存储在第七个桶中,2982个将被存储在第二个桶中,等等。

同样,在哈希索引,Hash索引列是通过哈希函数来匹配(类似于地图操作在HashMap中java)。比赛胜利后,

索引列将存储在与哈希桶匹配的表中。在表中会有实际的数据行指针,然后根据实际的数据行指针查找相应的数据行。

一般来说,要查找一行数据或处理WHERE子句,SQLServer引擎需要执行以下操作

1。根据条件中的参数生成合适的散列函数。

2。索引列匹配并匹配对应的哈希桶。查找对应的哈希桶意味着相应的数据行指针(行指针)也被找到。

三.读取数据

哈希索引比B树索引更简单,因为它不需要遍历B树,因此访问速度会更快。




哈希函数和相应文法的示例


创建表dbo.hk_tbl
(
{ int int标识(1, 1)
不为空
主键聚集哈希(bucket_count = 100000),
{资料} char(32)整理latin1_general_100_bin2
无效的,
{ } DateTime DT不空,
)
(与
= memory_optimized
在,
=耐久性
schema_and_data);


在SQL Server 2014中,在创建内存优化表之后,不能再添加哈希索引,但在SQL Server 2016中,在创建表之后添加哈希索引。

添加哈希索引是脱机操作。

哈希索引中的桶数

(bucket_count = 100000)定义可由哈希索引使用桶数,这是固定的,由用户指定的桶数,

而不是执行查询,由SQL服务器生成的桶的数量是确定的。桶的数量总是四的RMS的2的子方和五(1024, 2048, 4096等)。

对SQL server2014哈希索引实际上是类似于MySQL的自适应哈希索引的原则,这既是为了摆脱了B树的束缚,使搜索效率更快。

关系数据库如何工作本文还描述了哈希连接的原理,您可以看看它。