Estoy empezando a aprender los planes de ejecución y estoy confundido acerca de cómo funciona exactamente una coincidencia hash y por qué se usaría en una unión simple:
select Posts.Title, Users.DisplayName
From Posts JOIN Users on
Posts.OwnerUserId = Users.Id
OPTION (MAXDOP 1)
Según tengo entendido, los resultados de la exploración de índice superior se convierten en hash y se busca cada fila en la exploración agrupada de índice inferior. Entiendo cómo funcionan las tablas hash al menos hasta cierto punto, pero estoy confundido acerca de qué valores se convierten exactamente en hash en un ejemplo como este.
Lo que tendría sentido para mí es que el campo común entre ellos, la identificación, está en hash, pero si este es el caso, ¿por qué hash un número?
fuente
OPTION (FAST n)
pista, donde n es el número aproximado de filas que espera. Lo que esto hará es sesgar el optimizador hacia bucles anidados en lugar de uniones hash cuando n es bajo. La razón es que las uniones hash son rápidas para las grandes pero tienen un alto costo de inicio. Los bucles anidados son caros por fila, pero pueden comenzar de manera muy económica. Por lo tanto, es una cuestión de ajuste en función de sus datos reales y el patrón de acceso.De http://sqlinthewild.co.za/index.php/2007/12/30/execution-plan-operations-joins/
"La combinación hash es una de las operaciones de combinación más caras, ya que requiere la creación de una tabla hash para hacer la combinación. Dicho esto, es la combinación que es mejor para entradas grandes y sin clasificar. Es la que requiere más memoria de todas de las uniones
La combinación de hash lee primero una de las entradas y comprime la columna de combinación y coloca el hash resultante y los valores de la columna en una tabla de hash acumulada en la memoria. Luego lee todas las filas en la segunda entrada, las combina y comprueba las filas en el depósito de hash resultante para las filas de unión ".
que enlaza a esta publicación:
http://blogs.msdn.com/b/craigfr/archive/2006/08/10/687630.aspx
HTH
fuente
La ventaja de trocear un campo numérico es que está tomando un valor mayor y dividiéndolo en partes más pequeñas para que pueda caber en una tabla hash.
Así es como lo describe Grant Fritchey:
"Una tabla hash, por otro lado, es una estructura de datos que divide todos los elementos en categorías de igual tamaño, o depósitos, para permitir un acceso rápido a los elementos. La función hash determina en qué depósito entra un elemento. Por ejemplo , puede tomar una fila de una tabla, convertirla en un valor hash y luego almacenar el valor hash en una tabla hash ".
También puede obtener una copia gratuita de su libro electrónico "Disección de planes de ejecución de SQL Server" en un enlace del siguiente artículo:
Fuente: http://www.simple-talk.com/sql/performance/graphical-execution-plans-for-simple-sql-queries/
fuente