我有这个软件工作,但现在我打电话报告时花了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'))