Estou começando a aprender planos de execução e estou confuso sobre como exatamente uma correspondência de hash funciona e por que ela seria usada em uma associação simples:
select Posts.Title, Users.DisplayName
From Posts JOIN Users on
Posts.OwnerUserId = Users.Id
OPTION (MAXDOP 1)
Pelo que entendi, os resultados da verificação superior do índice tornam-se hashable e cada linha na verificação agrupada do índice inferior é pesquisada. Entendo como as tabelas de hash funcionam, pelo menos em algum grau, mas estou confuso sobre quais valores são exatamente copiados em um exemplo como este.
O que faria sentido para mim é o campo comum entre eles, o id, é o hash - mas, se for esse o caso, por que o hash de um número?
fonte
OPTION (FAST n)
dica, onde n é o número aproximado de linhas que você espera. O que isso fará é direcionar o otimizador para loops aninhados em vez de junções de hash quando n estiver baixo. O motivo é que as junções de hash são rápidas para junções grandes, mas têm um alto custo de inicialização. Os loops aninhados são caros por linha, mas podem começar muito barato. Portanto, é uma questão de ajuste fino com base nos dados reais e no padrão de acesso.De http://sqlinthewild.co.za/index.php/2007/12/30/execution-plan-operations-joins/
"A junção de hash é uma das operações de junção mais caras, pois requer a criação de uma tabela de hash para fazer a junção. Dito isso, é a junção que é melhor para entradas grandes e não classificadas. É a que mais consome muita memória. das junções
A junção de hash lê primeiro uma das entradas e hashes a coluna de junção e coloca os valores de hash e coluna resultantes em uma tabela de hash criada na memória. Em seguida, ele lê todas as linhas da segunda entrada, faz o hash e verifica as linhas no intervalo de hash resultante para as linhas de junção ".
quais links para este post:
http://blogs.msdn.com/b/craigfr/archive/2006/08/10/687630.aspx
HTH
fonte
A vantagem de fazer hash em um campo numérico é que você está pegando um valor maior e dividindo-o em pedaços menores para que ele possa caber em uma tabela de hash.
Veja como Grant Fritchey o descreve:
"Uma tabela de hash, por outro lado, é uma estrutura de dados que divide todos os elementos em categorias de tamanho igual, ou buckets, para permitir acesso rápido aos elementos. A função de hash determina em qual bucket um elemento entra. Por exemplo , você pode pegar uma linha de uma tabela, fazer a hash em um valor de hash e depois armazenar o valor em uma tabela de hash. "
Você também pode obter uma cópia gratuita de seu e-book "Dissecando planos de execução do SQL Server" em um link do seguinte artigo:
Fonte: http://www.simple-talk.com/sql/performance/graphical-execution-plans-for-simple-sql-queries/
fonte