SQL查询需要超过20分钟

时间:2014-01-24 15:02:40

标签: sql optimization toad

我有这个软件工作,但现在我打电话报告时花了20多分钟。我已经分开检索了所有查询,而且这个查询生成的时间超过10分钟。我尝试过Toad Optimizer,但我什么都没得到。

我还尝试更改WHERE子句结束的子查询,但是参数更多。

SELECT DISTINCT
pla_his_consolidado.vendor,   
per_his_maestrovendor.sorteoporapellido,  
per_his_generalempleado.codigovendoranterior, 
per_his_generalempleado.ultimafechaingreso,
CASE per_his_generalempleado.codigoafp WHEN '00' THEN 'ONP' ELSE afp.nombreafp END as nombreafp,    
per_his_generalempleado.numeroafp,
titulopuesto.titulopuesto,   
per_his_maestrovendor.codigoidentificacion,
categoriaempleado.descripcion,   
per_his_vendorempleado.centrocostos,   
maestracentrocostos.descripcion,   
maestralocacion.descripcion,   
per_his_salariobasico.salariobasico,
sys_tabladetablas.descripcion    
from
per_his_vendorempleado 
    LEFT OUTER JOIN maestracentrocostos ON per_his_vendorempleado.centrocostos = maestracentrocostos.centrocostos
    LEFT OUTER JOIN compania ON per_his_vendorempleado.compania = compania.compania
    LEFT OUTER JOIN maestralocacion ON per_his_vendorempleado.locacion = maestralocacion.locacion, 
    per_his_generalempleado 
    LEFT OUTER JOIN afp ON per_his_generalempleado.codigoafp = afp.codigoafp 
    LEFT OUTER JOIN sys_tabladetablas ON per_his_generalempleado.regimenpensionario = sys_tabladetablas.codigo
    LEFT OUTER JOIN lugartrabajo ON per_his_generalempleado.lugartrabajo = lugartrabajo.lugartrabajo
    LEFT OUTER JOIN titulopuesto ON per_his_generalempleado.codigopuesto = titulopuesto.codigopuesto
    LEFT OUTER JOIN categoriaempleado ON per_his_generalempleado.categoriaempleado = categoriaempleado.categoriaempleado,
pla_his_consolidado,   
per_his_accion,   
per_his_maestrovendor,   
per_his_salariobasico
WHERE 
( pla_his_consolidado.historiaid = per_his_accion.historiaid ) and  
( per_his_accion.idmaestrovendor = per_his_maestrovendor.idmaestrovendor ) and  
( per_his_accion.idgeneralempleado = per_his_generalempleado.idgeneralempleado ) and  
( per_his_accion.idvendorempleado = per_his_vendorempleado.idvendorempleado ) and  
( per_his_accion.idsalariobasico = per_his_salariobasico.idsalariobasico ) and 
        maestralocacion.lugartrabajo = lugartrabajo.lugartrabajo and
per_his_generalempleado.tipoempleado = categoriaempleado.tipoempleado and
        maestralocacion.compania = compania.compania and
        maestracentrocostos.compania = compania.compania and
( ( pla_his_consolidado.codigoperiodo = '201310M1' ) AND  
( pla_his_consolidado.codigoproceso = 'PLLALAMO' ) AND  
( pla_his_consolidado.compania = '000001' ) ) AND  
(sys_tabladetablas.codigotabla = (select min(codigotabla) from sys_tabladetablasatributos where nombrecampo = 'generalempleado.regimenpensionario')) 
UNION ALL
SELECT DISTINCT
gratificacionreintegro.vendor,   
per_his_maestrovendor.sorteoporapellido,  
per_his_generalempleado.codigovendoranterior,  
per_his_generalempleado.ultimafechaingreso, 
CASE per_his_generalempleado.codigoafp WHEN '00' THEN 'ONP' ELSE afp.nombreafp END as nombreafp,    
per_his_generalempleado.numeroafp,
titulopuesto.titulopuesto,   
per_his_maestrovendor.codigoidentificacion,   
categoriaempleado.descripcion,   
per_his_vendorempleado.centrocostos,   
maestracentrocostos.descripcion,   
maestralocacion.descripcion,   
per_his_salariobasico.salariobasico,
sys_tabladetablas.descripcion
from
per_his_vendorempleado 
    LEFT OUTER JOIN maestracentrocostos ON per_his_vendorempleado.centrocostos = maestracentrocostos.centrocostos
    LEFT OUTER JOIN compania ON per_his_vendorempleado.compania = compania.compania
    LEFT OUTER JOIN maestralocacion ON per_his_vendorempleado.locacion = maestralocacion.locacion, 
    per_his_generalempleado 
    LEFT OUTER JOIN afp ON per_his_generalempleado.codigoafp = afp.codigoafp 
    LEFT OUTER JOIN sys_tabladetablas ON per_his_generalempleado.regimenpensionario = sys_tabladetablas.codigo
    LEFT OUTER JOIN lugartrabajo ON per_his_generalempleado.lugartrabajo = lugartrabajo.lugartrabajo
    LEFT OUTER JOIN titulopuesto ON per_his_generalempleado.codigopuesto = titulopuesto.codigopuesto
    LEFT OUTER JOIN categoriaempleado ON per_his_generalempleado.categoriaempleado = categoriaempleado.categoriaempleado,
gratificacionreintegro,   
per_his_accion,   
per_his_maestrovendor,   
per_his_salariobasico
WHERE 
( gratificacionreintegro.historiaid = per_his_accion.historiaid ) and  
( per_his_accion.idmaestrovendor = per_his_maestrovendor.idmaestrovendor ) and  
( per_his_accion.idgeneralempleado = per_his_generalempleado.idgeneralempleado ) and  
( per_his_accion.idvendorempleado = per_his_vendorempleado.idvendorempleado ) and  
( per_his_accion.idsalariobasico = per_his_salariobasico.idsalariobasico ) and 
        maestralocacion.lugartrabajo = lugartrabajo.lugartrabajo and
per_his_generalempleado.tipoempleado = categoriaempleado.tipoempleado and
        maestralocacion.compania = compania.compania and
        maestracentrocostos.compania = compania.compania and
( ( gratificacionreintegro.periodoproceso = '201310M1' ) AND  
( gratificacionreintegro.proceso = 'PLLALAMO' ) AND  
( gratificacionreintegro.compania = '000001' ) ) AND  
(sys_tabladetablas.codigotabla = (select min(codigotabla) from sys_tabladetablasatributos where nombrecampo = 'generalempleado.regimenpensionario'))    
UNION ALL
SELECT DISTINCT
salario.vendor,   
per_his_maestrovendor.sorteoporapellido,  
per_his_generalempleado.codigovendoranterior,  
per_his_generalempleado.ultimafechaingreso,   
CASE per_his_generalempleado.codigoafp WHEN '00' THEN 'ONP' ELSE afp.nombreafp END as nombreafp,
per_his_generalempleado.numeroafp,
titulopuesto.titulopuesto,   
per_his_maestrovendor.codigoidentificacion,   
categoriaempleado.descripcion,   
per_his_vendorempleado.centrocostos,   
maestracentrocostos.descripcion,   
maestralocacion.descripcion,   
per_his_salariobasico.salariobasico,
sys_tabladetablas.descripcion
from
per_his_vendorempleado 
    LEFT OUTER JOIN maestracentrocostos ON per_his_vendorempleado.centrocostos = maestracentrocostos.centrocostos
    LEFT OUTER JOIN compania ON per_his_vendorempleado.compania = compania.compania
    LEFT OUTER JOIN maestralocacion ON per_his_vendorempleado.locacion = maestralocacion.locacion, 
    per_his_generalempleado 
    LEFT OUTER JOIN afp ON per_his_generalempleado.codigoafp = afp.codigoafp 
    LEFT OUTER JOIN sys_tabladetablas ON per_his_generalempleado.regimenpensionario = sys_tabladetablas.codigo
    LEFT OUTER JOIN lugartrabajo ON per_his_generalempleado.lugartrabajo = lugartrabajo.lugartrabajo
    LEFT OUTER JOIN titulopuesto ON per_his_generalempleado.codigopuesto = titulopuesto.codigopuesto
    LEFT OUTER JOIN categoriaempleado ON per_his_generalempleado.categoriaempleado = categoriaempleado.categoriaempleado,
salario,   
per_his_accion,   
per_his_maestrovendor,   
per_his_salariobasico
WHERE 
( salario.historiaid = per_his_accion.historiaid ) and  
( per_his_accion.idmaestrovendor = per_his_maestrovendor.idmaestrovendor ) and  
( per_his_accion.idgeneralempleado = per_his_generalempleado.idgeneralempleado ) and  
( per_his_accion.idvendorempleado = per_his_vendorempleado.idvendorempleado ) and  
( per_his_accion.idsalariobasico = per_his_salariobasico.idsalariobasico ) and
        maestralocacion.lugartrabajo = lugartrabajo.lugartrabajo and
per_his_generalempleado.tipoempleado = categoriaempleado.tipoempleado and
        maestralocacion.compania = compania.compania and
        maestracentrocostos.compania = compania.compania and
( ( salario.periodoproceso = '201310M1' ) AND  
( salario.codigoproceso = 'PLLALAMO' ) AND  
( salario.compania = '000001' ) ) AND  
(sys_tabladetablas.codigotabla = (select min(codigotabla) from sys_tabladetablasatributos where nombrecampo = 'generalempleado.regimenpensionario'))    
UNION ALL
SELECT DISTINCT
(vacacion.vendor),   
per_his_maestrovendor.sorteoporapellido, 
per_his_generalempleado.codigovendoranterior,   
per_his_generalempleado.ultimafechaingreso,   
CASE per_his_generalempleado.codigoafp WHEN '00' THEN 'ONP' ELSE afp.nombreafp END as nombreafp,
per_his_generalempleado.numeroafp,
titulopuesto.titulopuesto,   
per_his_maestrovendor.codigoidentificacion,   
categoriaempleado.descripcion,   
per_his_vendorempleado.centrocostos,   
maestracentrocostos.descripcion,   
maestralocacion.descripcion,   
per_his_salariobasico.salariobasico,
sys_tabladetablas.descripcion
from
per_his_vendorempleado 
    LEFT OUTER JOIN maestracentrocostos ON per_his_vendorempleado.centrocostos = maestracentrocostos.centrocostos
    LEFT OUTER JOIN compania ON per_his_vendorempleado.compania = compania.compania
    LEFT OUTER JOIN maestralocacion ON per_his_vendorempleado.locacion = maestralocacion.locacion, 
    per_his_generalempleado 
    LEFT OUTER JOIN afp ON per_his_generalempleado.codigoafp = afp.codigoafp 
    LEFT OUTER JOIN sys_tabladetablas ON per_his_generalempleado.regimenpensionario = sys_tabladetablas.codigo
    LEFT OUTER JOIN lugartrabajo ON per_his_generalempleado.lugartrabajo = lugartrabajo.lugartrabajo
    LEFT OUTER JOIN titulopuesto ON per_his_generalempleado.codigopuesto = titulopuesto.codigopuesto
    LEFT OUTER JOIN categoriaempleado ON per_his_generalempleado.categoriaempleado = categoriaempleado.categoriaempleado,
vacacion,   
per_his_accion,   
per_his_maestrovendor,   
per_his_salariobasico
WHERE 
( vacacion.historiaid = per_his_accion.historiaid ) and  
( per_his_accion.idmaestrovendor = per_his_maestrovendor.idmaestrovendor ) and  
( per_his_accion.idgeneralempleado = per_his_generalempleado.idgeneralempleado ) and  
( per_his_accion.idvendorempleado = per_his_vendorempleado.idvendorempleado ) and  
( per_his_accion.idsalariobasico = per_his_salariobasico.idsalariobasico ) and 
        maestralocacion.lugartrabajo = lugartrabajo.lugartrabajo and
per_his_generalempleado.tipoempleado = categoriaempleado.tipoempleado and
        maestralocacion.compania = compania.compania and
        maestracentrocostos.compania = compania.compania and
( ( vacacion.periodoproceso = '201310M1' ) AND  
( vacacion.proceso = 'PLLALAMO' ) AND  
( vacacion.compania = '000001' ) ) AND  
(sys_tabladetablas.codigotabla = (select min(codigotabla) from sys_tabladetablasatributos where nombrecampo = 'generalempleado.regimenpensionario'))    
UNION ALL
SELECT DISTINCT
(reservas.vendor),   
per_his_maestrovendor.sorteoporapellido,
per_his_generalempleado.codigovendoranterior,    
per_his_generalempleado.ultimafechaingreso,   
CASE per_his_generalempleado.codigoafp WHEN '00' THEN 'ONP' ELSE afp.nombreafp END as nombreafp,
per_his_generalempleado.numeroafp,
titulopuesto.titulopuesto,   
per_his_maestrovendor.codigoidentificacion,  
categoriaempleado.descripcion,   
per_his_vendorempleado.centrocostos,   
maestracentrocostos.descripcion,   
maestralocacion.descripcion,   
per_his_salariobasico.salariobasico, 
sys_tabladetablas.descripcion
from
per_his_vendorempleado 
    LEFT OUTER JOIN maestracentrocostos ON per_his_vendorempleado.centrocostos = maestracentrocostos.centrocostos
    LEFT OUTER JOIN compania ON per_his_vendorempleado.compania = compania.compania
    LEFT OUTER JOIN maestralocacion ON per_his_vendorempleado.locacion = maestralocacion.locacion, 
    per_his_generalempleado 
    LEFT OUTER JOIN afp ON per_his_generalempleado.codigoafp = afp.codigoafp 
    LEFT OUTER JOIN sys_tabladetablas ON per_his_generalempleado.regimenpensionario = sys_tabladetablas.codigo
    LEFT OUTER JOIN lugartrabajo ON per_his_generalempleado.lugartrabajo = lugartrabajo.lugartrabajo
    LEFT OUTER JOIN titulopuesto ON per_his_generalempleado.codigopuesto = titulopuesto.codigopuesto
    LEFT OUTER JOIN categoriaempleado ON per_his_generalempleado.categoriaempleado = categoriaempleado.categoriaempleado,
reservas,   
per_his_accion,   
per_his_maestrovendor,   
per_his_salariobasico
WHERE 
( reservas.historiaid = per_his_accion.historiaid ) and  
( per_his_accion.idmaestrovendor = per_his_maestrovendor.idmaestrovendor ) and  
( per_his_accion.idgeneralempleado = per_his_generalempleado.idgeneralempleado ) and  
( per_his_accion.idvendorempleado = per_his_vendorempleado.idvendorempleado ) and  
( per_his_accion.idsalariobasico = per_his_salariobasico.idsalariobasico ) and 
        maestralocacion.lugartrabajo = lugartrabajo.lugartrabajo and
per_his_generalempleado.tipoempleado = categoriaempleado.tipoempleado and
        maestralocacion.compania = compania.compania and
        maestracentrocostos.compania = compania.compania and
( ( reservas.periodoproceso = '201310M1' ) AND  
( reservas.proceso = 'PLLALAMO' ) AND  
( reservas.compania = '000001' ) ) AND  
(sys_tabladetablas.codigotabla = (select min(codigotabla) from sys_tabladetablasatributos where nombrecampo = 'generalempleado.regimenpensionario'))

0 个答案:

没有答案