2010-10-11 17 views

Respuesta

23

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.

+1

¿Quieres un poco de jarabe con ese waffle? –

+0

Dado que los datos se extraen de dos tablas no relacionadas que contienen GUID, sé que nunca habrá contenido duplicado entre las dos consultas. –

+3

@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" –

1

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.

6

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.

+0

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. –

+1

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

1

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.