散列连接

当两个连接表中至少一个没有连接列的索引时或者当数据库服务器必须从两个表中读取许多行时,优化器常常使用散列连接。当数据库服务器执行散列连接时,任何索引和任何排序均不是必需的。

散列连接由两个活动组成:首先构建散列表(构建阶段),然后探测散列表(探测阶段)。图 1 显示了散列连接的详细信息。

在建立阶段,数据库服务器读取一个表并在应用所有的过滤器之后创建散列表。从概念上讲,散列表可看作一系列的存储区,每一个存储区都有一个通过应用散列功能从键值得到的地址。数据库服务器不对特定散列存储区中的键进行排序。

较少的散列表可以存放在数据库服务器共享内存的虚拟部分中。数据库服务器将磁盘上较大的散列文件存储在由 DBSPACETEMP 配置参数或由 DBSPACETEMP 环境变量所指定的数据库空间中。

在探测阶段,数据库服务器读取连接中的另一个表并应用所有的过滤器。对于符合表上的过滤器条件的每一行,数据库服务器应用键上的散列功能并探测散列表以查找匹配行。

图: 如何执行散列连接


在周围的文本中描述此图。