Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General »

Problema con UNION; genera demora en exceso

Estas en el tema de Problema con UNION; genera demora en exceso en el foro de Bases de Datos General en Foros del Web. Holas. Tengo el siguiente Query: SELECT t.label, u.vnousr || ' ' || u.vappat as client, a.vdeare, t.starttime, t.endtime,' ' as summary, 'LOG' as Tabla , ...
  #1 (permalink)  
Antiguo 26/12/2006, 11:07
k3n
 
Fecha de Ingreso: marzo-2006
Mensajes: 56
Antigüedad: 18 años, 2 meses
Puntos: 0
Problema con UNION; genera demora en exceso

Holas. Tengo el siguiente Query:

SELECT
t.label, u.vnousr || ' ' || u.vappat as client,
a.vdeare, t.starttime, t.endtime,' ' as summary,
'LOG' as Tabla ,
'Terminado' as situacion ,
t.incident as incid ,
' ' as TipoInc,
t.incident as incidente
FROM
workflow.log_workflow t, workflow.usr u, workflow.are a
WHERE
t.ccoexp = '2005034139' AND
trim(t.client) = trim(u.user_nt) and
t.label <> 'Seleccion' AND
u.ccoare = a.ccoare
union

SELECT s.label, u.vnousr || ' ' || u.vappat as client, a.vdeare, s.starttime, s.endtime, s.summary as summary, 'STEP' as Tabla ,
DECODE(s.status,'1','Activo', 'Terminado') AS SITUACION, s.incident as incid ,
decode( instr(nvl(s.summary,'X'), 'SubFlujo'),0, 'Principal' , 'SubFlujo') as TipoInc, s.incident as incidente
FROM ultimus.data_adm_doc@dbl_fornax t , workflow.usr u,workflow.are a, ultimus.step@dbl_fornax s
WHERE t.ccoexp = '2005034139'
and t.name = s.name and t.incident = s.incident
and s.name in ( select name from ultimus.data_adm_doc@dbl_fornax da where da.ccoexp = '2005034139')
and s.label <> 'Seleccion'
AND s.incident in ( select incident from ultimus.data_adm_doc@dbl_fornax da where da.ccoexp = '2005034139')
AND trim(s.client) = trim(u.user_nt)
AND u.ccoare = a.ccoare
ORDER BY 4 Desc

Las consulta antes y después del union, funcionan normalmente y demoran a lo máximo tres segundos. Cuando funcionan juntos, han llegado a demorar 550 segundos en realizar la búsqueda. ¿Qué puede producir que el UNION genere tal demora?
  #2 (permalink)  
Antiguo 26/12/2006, 19:12
Avatar de haron  
Fecha de Ingreso: febrero-2004
Ubicación: Cádiz (refinitivo)
Mensajes: 632
Antigüedad: 20 años, 2 meses
Puntos: 3
Re: Problema con UNION; genera demora en exceso

el "order by 4" se aplica a las dos selects. osea, que si la primera arroja cuatrocientos mil registros y la segunta tambien, intentara ordenar ochocientos mil registros.

a lo mejor van por ahi los tiros.
  #3 (permalink)  
Antiguo 27/12/2006, 11:30
k3n
 
Fecha de Ingreso: marzo-2006
Mensajes: 56
Antigüedad: 18 años, 2 meses
Puntos: 0
Re: Problema con UNION; genera demora en exceso

Hola. Pues no; las balas no van por ahí. Comenté la parte del order by y nada; igual demora demasiado. Andaba pensando que tal vez el "@dbl_fornax", que es el data link, es lo que me genera el problema.
  #4 (permalink)  
Antiguo 04/01/2007, 12:59
k3n
 
Fecha de Ingreso: marzo-2006
Mensajes: 56
Antigüedad: 18 años, 2 meses
Puntos: 0
Re: Problema con UNION; genera demora en exceso

Tuve una mejora en usar UNION ALL, pero no en todos los casos. Aún demora en ciertos casos donde es grande la búsqueda; ¿alguien tiene otra idea por ahí? Me han dicho que COBOL es velocísimo ¬¬.
  #5 (permalink)  
Antiguo 08/01/2007, 12:02
Avatar de Gabo77  
Fecha de Ingreso: noviembre-2006
Mensajes: 381
Antigüedad: 17 años, 5 meses
Puntos: 6
Re: Problema con UNION; genera demora en exceso

y si te creas una tabla teporal, e insertas los datos de ambas consultas? y luego devuelves los datos de la temporal?

Código:
SELECT
t.label, u.vnousr || ' ' || u.vappat as client,
a.vdeare, t.starttime, t.endtime,' ' as summary,
'LOG' as Tabla ,
'Terminado' as situacion ,
t.incident as incid ,
' ' as TipoInc,
t.incident as incidente
INTO #TEMPORAL /*<<< ACA SE CREA LA TEMPORAL*/
FROM
workflow.log_workflow t, workflow.usr u, workflow.are a
WHERE
t.ccoexp = '2005034139' AND
trim(t.client) = trim(u.user_nt) and
t.label <> 'Seleccion' AND
u.ccoare = a.ccoare

INSERT INTO #TEMPORAL /*<<< ACA SE COMPLETAN LOS DEMÁS DATOS DE LA SIGUIENTE CONSULTA*/

SELECT s.label, u.vnousr || ' ' || u.vappat as client, a.vdeare, s.starttime, s.endtime, s.summary as summary, 'STEP' as Tabla ,
DECODE(s.status,'1','Activo', 'Terminado') AS SITUACION, s.incident as incid ,
decode( instr(nvl(s.summary,'X'), 'SubFlujo'),0, 'Principal' , 'SubFlujo') as TipoInc, s.incident as incidente
FROM ultimus.data_adm_doc@dbl_fornax t , workflow.usr u,workflow.are a, ultimus.step@dbl_fornax s
WHERE t.ccoexp = '2005034139'
and t.name = s.name and t.incident = s.incident
and s.name in ( select name from ultimus.data_adm_doc@dbl_fornax da where da.ccoexp = '2005034139')
and s.label <> 'Seleccion'
AND s.incident in ( select incident from ultimus.data_adm_doc@dbl_fornax da where da.ccoexp = '2005034139')
AND trim(s.client) = trim(u.user_nt)
AND u.ccoare = a.ccoare
ORDER BY 4 Desc

/*ACA SE DEVUELVE TODO*/
SELECT * FROM #TEMPORAL
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:09.