all sql mysql

union all sql server group by



Use una unión o una unión: lo que es más rápido (4)

Me pregunto si usted tenía una mesa y se unió, ¿sería más eficiente usar una combinación?

Sé que la unión crea más columnas, pero esto es más teórico. ¿Será necesario que la unión realice un escaneo de bucle anidado de la otra tabla como lo haría una unión?


La unión será más rápida, ya que simplemente pasa la primera instrucción SELECT, y luego analiza la segunda instrucción SELECT y agrega los resultados al final de la tabla de salida.

La Unión pasará por cada fila de ambas tablas, encontrando coincidencias en la otra tabla, por lo tanto, necesitará mucho más procesamiento debido a la búsqueda de filas coincidentes para cada fila.

EDITAR

Por Unión, me refiero a Unión Todas, ya que parecía adecuado para lo que estaba tratando de lograr. Aunque una unión normal es generalmente más rápida entonces únete.

EDIT 2 (Respuesta al comentario de @seebiscuit)

No estoy de acuerdo con él. Técnicamente hablando, no importa qué tan buena sea su unión, un "UNIRSE" es aún más caro que una pura concatenación. Hice una publicación de blog para demostrarlo en el codePERF[dot]net mi codePERF[dot]net . En la práctica, tienen dos propósitos completamente diferentes y es más importante asegurarse de que su indexación sea correcta y de utilizar la herramienta adecuada para el trabajo.

Técnicamente, creo que se puede resumir utilizando los siguientes 2 planes de ejecución tomados de la publicación de mi blog:

UNION ALL PLAN UNION ALL EJECUCION

JOIN plan de ejecución

Resultados prácticos

En términos prácticos, la diferencia en una búsqueda de índices agrupados es insignificante:


Lamento haber roto tu partido, pero una unión bien escrita será más rápida que un sindicato.

  • utiliza un modelo de recopilación de estadísticas más ligero (basado en la cardinalidad, en lugar de inmersiones aleatorias)
  • la consulta se analizará una sola vez (no es necesario realizar una evaluación de selección múltiple)
  • el conjunto de resultados no se materializará en un temptable (se iguala para UNION ALL)

Un solo SELECT no utilizará más de un índice por tabla. Una UNION no utilizará más de un índice por SELECT en la unión.

UNION hará un mejor uso de los índices que podrían resultar en una consulta más rápida.


JOIN y UNION tienen dos propósitos diferentes. JOIN se utiliza para agregar tablas adicionales a una consulta con el fin de agregar criterios de selección y posiblemente columnas adicionales. UNION se utiliza para combinar los resultados de dos consultas distintas con las mismas columnas. Preguntar cuál es más eficiente es como preguntar cuál de "una barra de pan" y "el viento soplando" es más "naranja".