Tengo dos consultas que estoy UNION
juntas de modo que ya sé que no habrá elementos duplicados entre las dos consultas. Por lo tanto, UNION
y UNION ALL
producirán los mismos resultados.Para unir o unir todo, esa es la pregunta
¿Cuál debo usar?
Tengo dos consultas que estoy UNION
juntas de modo que ya sé que no habrá elementos duplicados entre las dos consultas. Por lo tanto, UNION
y UNION ALL
producirán los mismos resultados.Para unir o unir todo, esa es la pregunta
¿Cuál debo usar?
Debe usar la que coincida con la intención de lo que está buscando. Si desea asegurarse de que no haya duplicados, use UNION
, de lo contrario, use UNION ALL
. El hecho de que sus datos produzcan los mismos resultados en este momento no significa que siempre lo hará.
Dicho esto, UNION ALL
será más rápido en cualquier implementación de base de datos, consulte los siguientes artículos para ver ejemplos. Pero, por lo general, son lo mismo, excepto que UNION
realiza un paso adicional para eliminar filas idénticas (como cabría esperar), y puede tender a dominar el tiempo de ejecución.
me gustaría utilizar UNION ALL
de todos modos. Aunque sabe sabe que no habrá duplicados, dependiendo del motor de su servidor de base de datos, es posible que no lo sepa.
Por lo tanto, solo para proporcionar información adicional al servidor de bases de datos, para que su planificador de consultas sea una mejor opción (probablemente), use UNION ALL
.
Dicho esto, si su servidor de base de datos 's planificador de consulta es lo suficientemente inteligente como para inferir que la información de los UNION
cláusula y tabla de índices, a continuación, los resultados de rendimiento (y semánticos en cuanto a) debe ser el mismo.
En cualquier caso, depende mucho del servidor de base de datos que está utilizando.
Según http://blog.sqlauthority.com/2007/03/10/sql-server-union-vs-union-all-which-is-better-for-performance/ al menos para el rendimiento es mejor utilizar UNION ALL, ya que no activamente duplicados distintas y, como tal, es más rápido
veo que ha etiquetado esta pregunta RENDIMIENTO, así que supongo que eso es tu consideración principal.
UNION ALL
superará absolutamente UNION
ya que SQL no tiene que comprobar los dos conjuntos para dups.
A menos que necesite SQL para realizar la verificación duplicada para usted, siempre use UNION ALL
.
Creo que ya lo sabe. Está preguntando específicamente en el escenario que él sabe (y probablemente DB también sabe) que no van a haber dúplex. –
No entiendo tu punto. ¿Está preguntando, "si SQL puede determinar que nunca habrá superposiciones en los dos conjuntos, optimizará el' UNION' para que no tenga que comparar, haciendo que funcione de manera idéntica a 'UNION ALL'? Respuesta: NO. use 'UNION TODO' – BradC
Como no habrá duplicados de los dos, use UNION ALL. No necesita verificar duplicados y UNION ALL preformará la tarea de manera más eficiente.
¿Quieres un poco de jarabe con ese waffle? –
Dado que los datos se extraen de dos tablas no relacionadas que contienen GUID, sé que nunca habrá contenido duplicado entre las dos consultas. –
@Mark - No está bromeando, está respondiendo a dos sabores de la pregunta. La pregunta principal es "¿Cuál debería usar?" y la respuesta es "usa el que coincida con tu intención". La pregunta * implícita * es "¿cuál sería más rápido de usar?", Y la respuesta es "UNION ALL" –