Pregunta

Me estoy empezando a aprender los planes de ejecución y estoy confundido acerca de cómo exactamente funciona una coincidencia hash y por qué se usaría en una combinación sencilla:

select Posts.Title, Users.DisplayName
From Posts JOIN Users on
Posts.OwnerUserId = Users.Id
OPTION (MAXDOP 1)

introducir descripción de la imagen aquí

A mi entender los resultados del índice principio Busque convertido en el hash poder y cada fila en la parte inferior del índice agrupado exploración se busca. Entiendo cómo funcionan las tablas hash a por lo menos un cierto grado, pero estoy confundido acerca de qué valores hash consiguen exactamente en un ejemplo como éste.

Lo que tendría sentido mi es la del campo común entre ellos, el ello, es ordenada - pero si este es el caso, ¿por qué un número de hash

?
¿Fue útil?

Solución

La respuesta de cotizaciones Como SQLRockstar

mejor para entradas grandes, sin clasificar.

Ahora,

  • desde el recorrido de índice Users.DisplayName (que se supone no agrupado) se obtiene Users.Id (suponiendo agrupado) = sin clasificar
  • También está escaneando Mensajes de OwnerUserId = sin clasificar

Este es 2 entradas no ordenadas.

Yo lo consideraría un índice en la tabla Mensajes en OwnerUserId, incluyendo el Título. Esto añade un poco de orden en un lado de la entrada a la unión + será cubriendo index

CREATE INDEX IX_OwnerUserId ON Posts (OwnerUserId) INCLUDE (Title)

A continuación, puede encontrar que no se utilizará el índice Users.DisplayName y se explorará el PK en su lugar.

Otros consejos

http://sqlinthewild.co.za/index php / 2007/12/30 / ejecución-plan-operaciones-une /

"El hash es uno de los más caros unirse a las operaciones, ya que requiere la creación de una tabla hash para hacer la unión. Dicho esto, es la unión que es lo mejor para las entradas grandes, sin clasificar. Es el más memoria- intensivo de cualquiera de los puntos de unión

La combinación hash primero lee una de las entradas y los hashes de la unión de la columna y la pone los valores de columna de hash resultante y en una tabla hash acumulado en la memoria. Entonces se lee todas las filas de la segunda entrada, hashes los cheques y las filas en el cubo hash resultante para las filas de unión. "

, que enlaza a este mensaje:

http://blogs.msdn.com/b/craigfr/archive /2006/08/10/687630.aspx

HTH

La ventaja de hash de un campo numérico es que usted está tomando un valor más grande y lo descomponen en partes más pequeñas para que pueda caber en una tabla hash.

Así es como subvención Fritchey lo describe así:

"una tabla hash, por otra parte, es una estructura de datos que divide todos los elementos en categorías de igual tamaño, o cubos, para permitir el acceso rápido a los elementos. Los determina la función hashing que cubo de un elemento entra en . Por ejemplo, se puede tomar una fila de una tabla, hachís en un valor hash, a continuación, almacenar el valor hash en una tabla hash. "

También puede obtener una copia gratuita de su libro electrónico "planes de ejecución de disección de SQL Server" de un enlace desde el artículo siguiente:

Fuente: http: //www.simple- talk.com/sql/performance/graphical-execution-plans-for-simple-sql-queries/

Licenciado bajo: CC-BY-SA con atribución
No afiliado a dba.stackexchange
scroll top