Estoy tratando de obtener la diferencia entre dos tablas casi idénticas en postgresql. La consulta actual Me postulo es:Postgresql UNION toma 10 veces más tiempo que ejecutar las consultas individuales
SELECT * FROM tableA EXCEPT SELECT * FROM tableB;
y
SELECT * FROM tableB EXCEPT SELECT * FROM tableA;
Cada una de las consultas anteriores dura aproximadamente 2 minutos para correr (Su una gran mesa)
quería combinar los dos consultas con la esperanza de ahorrar tiempo, así que probé:
SELECT * FROM tableA EXCEPT SELECT * FROM tableB
UNION
SELECT * FROM tableB EXCEPT SELECT * FROM tableA;
Y mientras funciona, se tarda 20 minutos en ejecutar !!! Supongo que tomaría como mucho 4 minutos, la cantidad de tiempo para ejecutar cada consulta individualmente.
¿Hay algún trabajo adicional que UNION esté haciendo que lo lleve tanto tiempo? ¿O hay alguna manera de acelerarlo (con o sin UNIÓN)?
ACTUALIZACIÓN: Ejecutar la consulta con UNION ALL toma 15 minutos, casi 4 veces más que ejecutar cada uno por su cuenta, ¿Estoy en lo cierto al decir que UNION (todo) no va a acelerar esto en absoluto?
¿Habrá duplicados en 'tableA' o' tableB' solo que deben omitirse? De lo contrario, intente 'UNION ALL'. –
@ScrumMeister: No he pensado en este antes. ¿Quita la unión los duplicados que provienen de una sola tabla? Pensé que solo eliminaba duplicados entre las dos tablas unificadas. Puede que tenga que investigar eso. – RThomas
¿Se puede publicar la salida de 'EXPLAIN ANALYZE'? –