在Oracle中,哈希联接和排序合并联接之间有什么区别?

在Oracle中,哈希联接和排序合并联接之间有什么区别?,oracle,join,Oracle,Join,在Oracle中,我可以使用提示use\u HASH或use\u MERGE来指示优化器执行哈希联接或排序合并联接。这些类型的联接有何不同,以及何时/为什么要使用其中一种联接?提示use\u hash针对指定的表请求哈希联接。散列联接将左侧表中的行加载到内存中的散列表中 use\u merge提示强制执行排序/合并操作,该操作基本上执行完整表扫描并动态创建传统索引。即从A到Z 由于哈希联接的内存限制,您通常只希望在较小的左侧表上使用它们 排序合并联接通常最适合于生成非常大的结果集或联接键上没有索

在Oracle中,我可以使用提示
use\u HASH
use\u MERGE
来指示优化器执行哈希联接或排序合并联接。这些类型的联接有何不同,以及何时/为什么要使用其中一种联接?

提示
use\u hash
针对指定的表请求哈希联接。散列联接将左侧表中的行加载到内存中的散列表中

use\u merge
提示强制执行排序/合并操作,该操作基本上执行完整表扫描并动态创建传统索引。即从A到Z

由于哈希联接的内存限制,您通常只希望在较小的左侧表上使用它们


排序合并联接通常最适合于生成非常大的结果集或联接键上没有索引的表的查询。

Jonathan Lewis对哈希联接和合并联接的工作原理给出了非常好的解释:

  • 散列联接-
  • 合并联接-
为了更好的衡量

  • 嵌套循环联接-
“何时/为什么我应该使用其中一种?”


一般来说,你不应该为此担心。这就是Oracle optimizer的作用。

我同意,一般来说,我不应该担心它。有时我会担心吗?@Matthew:就像所有提示一样,它们是一种策略的一部分,用于在优化器无法找到查询的最佳计划时(例如,当您对数据了解得更多时,优化器就会这样做)进行调整。它们应该少用,因为它们限制了优化器的选择。