Consejos para unirse a SQL SERVER 2008
-
20-09-2019 - |
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...
- ¿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.
- ¿Cuándo se utilizan las sugerencias JOIN?¿Cuando la mierda golpea al fanático y los cazafantasmas no están en la ciudad?
- ¿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.
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.
-
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 laJOIN
y las condicionesWHERE
. -
tipo
MERGE
ambas tablas se les atraviesa en el orden de clasificación, omitiendo los registros no coincidentes. Más rápido para losFULL JOIN
s 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) -
HASH
construir una tabla hash en el almacenamiento temporal (memoria otempdb
) 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ónWHERE
yJOIN
.
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.