Ver Mensaje Individual
  #1  
Antiguo 18-06-2019
Critter Critter is offline
Miembro
 
Registrado: may 2003
Posts: 60
Reputación: 22
Critter Va por buen camino
Question Vista muy lenta

Hola compañeros:

Llevo varias semanas dándole vueltas a la siguiente vista y no encuentro la manera de hacer que sea más rápida.
Imagino que el problema esta en la unión de las 2 tablas de CLIENTES y CAMBIOS_CLIENTES, ya que tienen
muchos registros. La idea es traer los registros de los expedientes y el registro de cada cliente para que devuelva
exactamente el estado del cliente en la fecha del expediente.
La lentitud aparece cuando se filtra por el DOI_CLIENTE o CLIENTE, osea, las columnas involucradas en
VERSION_CLIENTE. Por supuesto hay indices para DOI_CLIENTE y CLIENTE. Añadir que el servidor es firebird 2.1.7

Quedo a la espera de vuestra ayuda.

Gracias.

Código SQL [-]

CREATE VIEW VW_SELECCION_EXPEDIENTE (ID, PERIODO, ACTIVO, NUM_EXPTE_SERIE, EXPTE_SERIE, EXPTE_SERIE_ABREV, FECHA_ALTA, ESTADO_ID, ESTADO, IDENTIFICADOR, OPCIONAL, TERMINADO, GESTION_ID, GESTION, GESTION_AMPLIADO, CLIENTE_ID, TRANSMITENTE_ID, PROVEEDOR_ID, DOI_CLIENTE, CLIENTE, DOI_PROVEEDOR, PROVEEDOR, DOI_TRANSMITENTE, TRANSMITENTE, ANCLADO, AS_OBSERVACIONES, ESTADO_COLOR, AS_VINCULOS, AS_TAREAS)
AS            
  WITH VERSION_CLIENTE AS (
    SELECT CLIENTEID AS ID, NIF_CIF, FULL_NAME, FMOD FROM CLIENTES
    UNION ALL
    SELECT CLIENTEID, NIF_CIF, FULL_NAME, FECHA_INSERCION FROM CAMBIOS_CLIENTES
  )
                   
SELECT DISTINCT
  EXPEDIENTES.EXPEDIENTEID,
  EXTRACT(YEAR FROM FECHA),
  EXPEDIENTES.ACTIVO,
  (LPAD(TRIM(EXPEDIENTES.NUMEXPTE), 8, '0') || '/' || LPAD(TRIM(EXPEDIENTES.SERIEEXPTE), 3, '0')) AS NUM_EXPTE_SERIE,
  EXPTE_SERIES.DESCRIPCION AS SERIE,  
  EXPTE_SERIES.ABREV,
  EXPEDIENTES.FECHA,
  EXPEDIENTES.ESTADOID,
  EXPTE_ESTADOS.DESCRIPCION AS ESTADO,
  EXPEDIENTES.IDENTIFICADOR,
  EXPEDIENTES.OPCIONAL,
  EXPEDIENTES.TERMINADO,
  EXPEDIENTES.GESTIONID,
  EXPEDIENTES.GESTION,
  COALESCE('['|| EXPTE_SERIES.ABREV || '] ', '') || EXPEDIENTES.GESTION,    
  EXPEDIENTES.CLIENTEID AS CLIENTEID,
  COALESCE(EXPEDIENTES.TRANSMITENTEID, ''),
  COALESCE(EXPEDIENTES.PROVEEDORID, ''),
  CLIENTE.NIF_CIF AS NIF_CIF_CLIENTE,
  CLIENTE.FULL_NAME AS CLIENTE,
  COALESCE(PROVEEDOR.NIF_CIF, '') AS NIF_CIF_PROVEEDOR,
  COALESCE(PROVEEDOR.FULL_NAME, '') AS PROVEEDOR,
  COALESCE(TRANSMITENTE.NIF_CIF, '') AS NIF_CIF_TRANSMITENTE,
  COALESCE(TRANSMITENTE.FULL_NAME, '') AS TRANSMITENTE,
  EXPEDIENTES.ANCLADO,
  IIF((EXPEDIENTES.OBSERVACIONES IS NULL) OR (TRIM(EXPEDIENTES.OBSERVACIONES)=''), 0,1) AS AS_OBSERVACIONES,
  EXPTE_ESTADOS.COLOR,
  IIF(EXISTS(SELECT EXPTEVINCULADOS.PRINCIPAL FROM EXPTEVINCULADOS WHERE (EXPTEVINCULADOS.PRINCIPAL = EXPEDIENTES.EXPEDIENTEID)), 1, 0) AS AS_VINCULOS,
  IIF(EXISTS(SELECT EXPTE_TAREAS.ID FROM EXPTE_TAREAS WHERE (EXPTE_TAREAS.EXPEDIENTEID = EXPEDIENTES.EXPEDIENTEID)),1, 0) AS AS_TAREAS
  FROM EXPEDIENTES
  
  LEFT JOIN VERSION_CLIENTE CLIENTE ON ((CLIENTE.FMOD <= EXPEDIENTES.FMOD) AND (CLIENTE.ID = EXPEDIENTES.CLIENTEID))
  LEFT JOIN VERSION_CLIENTE PROVEEDOR ON ((PROVEEDOR.FMOD <= EXPEDIENTES.FMOD) AND (PROVEEDOR.ID = EXPEDIENTES.PROVEEDORID))
  LEFT JOIN VERSION_CLIENTE TRANSMITENTE ON ((TRANSMITENTE.FMOD <= EXPEDIENTES.FMOD) AND (TRANSMITENTE.ID = EXPEDIENTES.TRANSMITENTEID))
  
  LEFT JOIN ESTADOSEXPTE EXPTE_ESTADOS ON EXPTE_ESTADOS.ESTADOID = EXPEDIENTES.ESTADOID
  LEFT JOIN EXPTESERIE EXPTE_SERIES ON EXPTE_SERIES.ID = EXPEDIENTES.SERIEEXPTE
  WHERE (EXPEDIENTES.EXPEDIENTEID > 0) AND (EXPEDIENTES.DELETED = 0)
;
Responder Con Cita