【发布时间】:2011-05-07 10:48:36
【问题描述】:
在 Oracle 中,我可以使用提示 USE_HASH 或 USE_MERGE 来指示优化器执行散列连接或排序合并连接。这些类型的连接有何不同?何时/为什么要使用其中一种?
【问题讨论】:
在 Oracle 中,我可以使用提示 USE_HASH 或 USE_MERGE 来指示优化器执行散列连接或排序合并连接。这些类型的连接有何不同?何时/为什么要使用其中一种?
【问题讨论】:
Jonathan Lewis 对哈希连接和合并连接的工作原理做了很好的解释:
为了更好的衡量......
【讨论】:
“何时/为什么我应该使用其中一种”
通常您不必担心。这就是 Oracle 优化器的用途。
【讨论】:
use_hash 提示请求针对指定表的哈希联接。哈希连接将左侧表中的行加载到内存中的哈希表中。
use_merge 提示强制执行排序/合并操作,该操作本质上是进行全表扫描并动态创建传统索引。即,从 A 到 Z。
由于哈希连接的内存限制,您通常希望仅在较小的左侧表上使用它们
排序合并连接通常最适用于产生非常大的结果集或不具有连接键索引的表的查询。
【讨论】: