Pregunta

Recientemente, estaba intentando optimizar esta consulta.

UPDATE Analytics
SET UserID = x.UserID
FROM Analytics z 
INNER JOIN UserDetail x ON x.UserGUID = z.UserGUID

El plan de ejecución estimado muestra un 57 % en la actualización de la tabla y un 40 % en una coincidencia de hash (agregado).Husmeé un poco y encontré el tema de las sugerencias para UNIRSE.¡Así que agregué una pista LOOP a mi unión interna y WA-ZHAM!El nuevo plan de ejecución muestra un 38% en la actualización de la tabla y un 58% en una búsqueda de índice.

Así que estuve a punto de empezar a aplicar sugerencias LOOP a todas mis consultas hasta que la prudencia se apoderó de mí.Después de buscar en Google, me di cuenta de que las sugerencias para UNIRSE no están muy bien cubiertas en BOL.Por lo tanto...

  1. ¿Alguien puede decirme por qué aplicar sugerencias LOOP a todas mis consultas es una mala idea?Leí en alguna parte que LOOP JOIN es el método JOIN predeterminado para el optimizador de consultas, pero no pude verificar la validez de la declaración.
  2. ¿Cuándo se utilizan las sugerencias JOIN?¿Cuando la mierda golpea al fanático y los cazafantasmas no están en la ciudad?
  3. ¿Cuál es la diferencia entre las sugerencias LOOP, HASH y MERGE?BOL afirma que MERGE parece ser el más lento, pero ¿cuál es la aplicación de cada sugerencia?

¡Gracias por tu tiempo y ayuda a la gente!

Estoy ejecutando SQL Server 2008 por cierto.Las estadísticas mencionadas anteriormente son planes de ejecución ESTIMADOS.

¿Fue útil?

Solución

  

Por favor alguien puede decirme por qué la aplicación de BUCLE hace alusión a todas mis preguntas es una mala idea. He leído en alguna parte que una combinación de bucle está predeterminado ÚNETE método para optimizador de consultas, pero no pudo verificar la validez de la declaración?

Debido a que este roba el optimizador de la oportunidad de considerar otros métodos que pueden ser más eficientes.

  

Cuando se utilizan las sugerencias de combinación? Cuando la mierda golpea el ventilador y destructores fantasma no está en la ciudad?

Cuando la distribución de datos (en la que el optimizador toma sus decisiones) es severamente sesgada y las estadísticas no son capaces de representar correctamente.

  

¿Cuál es la diferencia entre LOOP, HASH y combinar pistas? BOL indica que se fusionan parece ser el más lento pero lo que es la aplicación de cada pista?

Estos son diferentes algoritmos.

  1. LOOP es bucles anidados: para cada registro de la tabla externa, la tabla interna se busca en los partidos (utilizando el índice de disponible). Más rápido cuando sólo una pequeña porción de los registros de ambas tablas satisfacer la JOIN y las condiciones WHERE.

  2. tipo MERGE ambas tablas se les atraviesa en el orden de clasificación, omitiendo los registros no coincidentes. Más rápido para los FULL JOINs y cuando ambos conjuntos de registros ya están ordenados (de operaciones de ordenación anterior o cuando se utiliza la ruta de acceso de índice)

  3. HASH construir una tabla hash en el almacenamiento temporal (memoria o tempdb) de una de las mesas y busca en ella para cada registro de la otra. Más rápido si la gran porción de los registros de cualquiera de las tablas coincide con la condición WHERE y JOIN.

Otros consejos

  

La ejecución estimado espectáculo plan de 57%   en la actualización de la tabla y el 40% en un hash   Partido (agregado). Hice un poco de espionaje   alrededor y se encontró con el tema de la   Sugerencias de combinación. Por lo que añade un toque de BUCLE   unirse a mi interior y WA-zham! El nuevo   plan de ejecución muestra 38% en la Tabla de   Actualización y el 58% en una búsqueda de índice.

Sin duda, eso significa que el plan propuesto es peor? Suponiendo que la actualización de la tabla tiene una constante de tiempo que ahora se está fuera costeado por la actividad de índice.

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