0
SELECT * FROM (
  SELECT * FROM (
    SELECT '1112468381_PRC1_INC',sysdate,TRUNC((p.F_CREACION-i.F_CREACION)*86400),TRUNC((i.F_CREACION-i.FECHA_PRESENTACION)*86400),TRUNC((sysdate-cast(from_tz(cast(p.F_CREACION as timestamp),'GMT') at time zone 'CET' as date))*86400),'','','','', '','','','','','','','','','', p.ID_PROCEDIMIENTO,p.SECUENCIA,p.USUARIO,p.GRUPO,p.TABLA,p.ACCION,p.TEXTO,p.C1,p.C2,p.C3, p.ORIGEN_ACCION,'','','','',i.ESTADO,i.SEVERIDAD,i.NDAI,i.TABLA_RAIZ,i.SEC_BOLETIN_RAIZ, i.OMEGA1,i.SERIE_EXTERNA,i.UNIDAD_RESPONSABLE,i.UNIDAD_CREADORA,i.ESTADO_RESPONSABILIDAD,i.COD_JALON,i.ID1,i.ID2,i.ID3,i.ID4, i.REPERCUSION,i.TIPO_INCOMUNICACION,i.ESTADO_SAF,i.ESTADO_ACTUACION,i.ESTADO_GESTION,i.NUM_ACTUACIONES,i.NUM_ACTUACIONES_IM,i.COD_RED,i.AREA,i.RED, i.TIPO_ELEMENTO,i.TIPO_SINTOMA,i.NOM_PROVINCIA,i.PROVINCIA,i.TEMP1,i.TEMP2,i.TEMP3,i.TEMP4,i.TEMP5,i.TEMP6, i.TEMP7,i.AUX1,i.AUX2,i.AUX3,cast(from_tz(cast(i.FECHA_PRESENTACION as timestamp),'GMT') at time zone 'CET' as date),cast(from_tz(cast(i.F_CREACION as timestamp),'GMT') at time zone 'CET' as date) as I_F_CREACION,i.FECHA_AFECTACION_SERVICIO,i.FECHA_FRANQUEO,i.CADENA_DELEGACION,i.ESTADO_BOL_RAIZ, '','','','','',
     CASE 
       WHEN i.TIPO_ELEMENTO='Equipo' THEN (SELECT E.MODO||'â'||E.COD_CLAVE||'â'||E.CLASE||'â'||E.TECNOLOGIA||'â'||E.TIPO_ELEMENTO_GENERICO||'â'||E.MODELO||'â'|| E.CATEGORIA_EDIFICIO ||'â'|| E.CODIGO_UBICACION ||'â'|| E.DESC_CLAVE ||'â'|| E.DESC_PRIMARIA ||'â'|| E.DESC_SECUNDARIA FROM IGRI.EQUIPO E WHERE E.SECUENCIA=i.SECUENCIA)
       WHEN i.TIPO_ELEMENTO='Sistemas de Transporte' THEN (SELECT S.MODO||'â'||S.COD_SISTEMA||'â'||S.CLASE||'â'||S.JERARQUIA||'â'||S.TIPO_ELEMENTO_GENERICO||'â'||'FREE6'||'â'||'FREE7'||'â'||'FREE8'||'â'||'FREE9'||'â'||'FREE10'||'â'||'FREE11' FROM IGRI.SISTEMA S WHERE S.SECUENCIA=i.SECUENCIA )
       ELSE 'ââââââââââ' END AS INV
    FROM IGRI.PROCEDIMIENTO p,IGRI.BOL_INC_DE_RED i
    WHERE
    i.TABLA = p.TABLA AND
    i.SECUENCIA = p.SECUENCIA AND
    p.ID_PROCEDIMIENTO > '1112468381'
    UNION ALL
    SELECT '1112468381_PRC2_INC',sysdate,TRUNC((p.F_CREACION-i.F_CREACION)*86400),TRUNC((i.F_CREACION-i.FECHA_PRESENTACION)*86400),TRUNC((sysdate-cast(from_tz(cast(p.F_CREACION as timestamp),'GMT') at time zone 'CET' as date))*86400),'','','','', '','','','','','','','','','', p.ID_PROCEDIMIENTO,p.SECUENCIA,p.USUARIO,p.GRUPO,p.TABLA,p.ACCION,p.TEXTO,p.C1,p.C2,p.C3, p.ORIGEN_ACCION,'','','','',i.ESTADO,i.SEVERIDAD,i.NDAI,i.TABLA_RAIZ,i.SEC_BOLETIN_RAIZ, i.OMEGA1,i.SERIE_EXTERNA,i.UNIDAD_RESPONSABLE,i.UNIDAD_CREADORA,i.ESTADO_RESPONSABILIDAD,i.COD_JALON,i.ID1,i.ID2,i.ID3,i.ID4, i.REPERCUSION,i.TIPO_INCOMUNICACION,i.ESTADO_SAF,i.ESTADO_ACTUACION,i.ESTADO_GESTION,i.NUM_ACTUACIONES,i.NUM_ACTUACIONES_IM,i.COD_RED,i.AREA,i.RED, i.TIPO_ELEMENTO,i.TIPO_SINTOMA,i.NOM_PROVINCIA,i.PROVINCIA,i.TEMP1,i.TEMP2,i.TEMP3,i.TEMP4,i.TEMP5,i.TEMP6, i.TEMP7,i.AUX1,i.AUX2,i.AUX3,cast(from_tz(cast(i.FECHA_PRESENTACION as timestamp),'GMT') at time zone 'CET' as date),cast(from_tz(cast(i.F_CREACION as timestamp),'GMT') at time zone 'CET' as date) as I_F_CREACION,i.FECHA_AFECTACION_SERVICIO,i.FECHA_FRANQUEO,i.CADENA_DELEGACION,i.ESTADO_BOL_RAIZ, '','','','','',
     CASE
       WHEN i.TIPO_ELEMENTO='Equipo' THEN (SELECT E.MODO||'â'||E.COD_CLAVE||'â'||E.CLASE||'â'||E.TECNOLOGIA||'â'||E.TIPO_ELEMENTO_GENERICO||'â'||E.MODELO||'â'|| E.CATEGORIA_EDIFICIO ||'â'|| E.CODIGO_UBICACION ||'â'|| E.DESC_CLAVE ||'â'|| E.DESC_PRIMARIA ||'â'|| E.DESC_SECUNDARIA FROM IGRI.EQUIPO E WHERE E.SECUENCIA=i.SECUENCIA)
       WHEN i.TIPO_ELEMENTO='Sistemas de Transporte' THEN (SELECT S.MODO||'â'||S.COD_SISTEMA||'â'||S.CLASE||'â'||S.JERARQUIA||'â'||S.TIPO_ELEMENTO_GENERICO||'â'||'FREE6'||'â'||'FREE7'||'â'||'FREE8'||'â'||'FREE9'||'â'||'FREE10'||'â'||'FREE11' FROM IGRI.SISTEMA S WHERE S.SECUENCIA=i.SECUENCIA )
       ELSE 'ââââââââââ' END AS INV
    FROM IGRI.PROCEDIMIENTO_2 p,IGRI.BOL_INC_DE_RED i
    WHERE
    i.TABLA = p.TABLA AND
    i.SECUENCIA = p.SECUENCIA AND
    p.ID_PROCEDIMIENTO > '1112468381'
  ) ORDER BY ID_PROCEDIMIENTO
) WHERE ROWNUM <= '3000'

In the tests that I have been carrying out my conclusions are the following:

  • In the where it penalizes i.TABLA = p.TABLA AND if this takes away the time improves I do not know the reason.
  • When in the select there are no operations of change time zones the time improves.

It seems that transformations of the type:

  • cast(from_tz(cast(p.F_CREACION as timestamp),'GMT') at time zone 'CET' as date)
  • TRUNC((p.F_CREACION-i.F_CREACION)*86400) penalize excessively
MT0
  • 143,790
  • 11
  • 59
  • 117
Mayte
  • 1
  • 1
  • 1
    Please [edit] the question to neatly format your code so that it is easily readable and reduce your code to a [MRE] which only includes the **minimum** of columns and tables. If you are asking about performance then include an `EXPLAIN PLAN`. – MT0 Nov 30 '21 at 13:20
  • 2
    Please read [this post on how to ask Oracle query optimisation questions](https://stackoverflow.com/a/34975420/1463250 on this site. Performance tuning questions are complicated and depend on the specifics of each situation. It is impossible for us to venture a meaningful opinion without more details from you eg regarding data types, sample values, expected outcomes. Why do you need to apply `CAST()` and `TRUNC()` as you propose? Why do you represent what appear to be **numeric values** as **strings** (`'1112468381'`)? – APC Nov 30 '21 at 16:42

0 Answers0