Claramente tenho um equívoco, mas nenhuma quantidade de documentação de consultoria resolveu isso. Considere o seguinte argumento:
- Geralmente nos preocupamos em unir heaps, porque classificá-los costuma ser mais caro do que ter um índice agrupado.
- Junções hash não requerem classificações.
- Do exposto acima, concluímos que você não deve se preocupar em unir heaps se você sempre puder obter (ou forçar) uma junção hash.
O desdém popular por montes sugere que o que foi dito acima está errado, mas onde está errado?
Isto está errado:
Só porque você não precisa classificar o Heap não significa que você não se beneficiaria de ele ser filtrado ou de alguma outra operação em que pesquisas classificadas contra ele seriam mais rápidas. Você corre o risco de fazer hash da tabela inteira se uma operação de filtro não puder ser aplicada antes no plano e o Heap inteiro acabar sendo escaneado.
Com um índice clusterizado, pelo menos é possível ser procurado ou escaneado de forma mais eficiente, reduzindo a quantidade de dados sendo operados anteriormente no plano. Então, o que é hash é um conjunto de dados muito menor, tornando-o uma operação mais rápida e eficiente.
Pelo menos esse é um exemplo.
Outra razão mais simplista é que você não deve sempre confiar em
HASH JOIN
s como sua operação de junção física porque nem sempre é a maneira mais eficiente de unir dois conjuntos de dados. Ao fazer isso, você joga fora 2/3 das outras maneiras do mecanismo de unir seus dados de forma potencialmente mais eficiente.