Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 18-06-2019
Critter Critter is offline
Miembro
 
Registrado: may 2003
Posts: 60
Poder: 21
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
  #2  
Antiguo 18-06-2019
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.022
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Es casi imposible poder ayudarte si no tenemos una BD para probar.
De todas formas, deberías ir probando poco a poco, trozo a trozo del código para saber exactamente dónde se produce el problema.
Por ejemplo, todos esos left join, ¿son necesarios? ¿no pueden ser inner join?
Es que, lo dicho al principio, no podemos averiguar, tendríamos que ir dando palos de ciego.
Responder Con Cita
  #3  
Antiguo 18-06-2019
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.233
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Sin saber la estructura de las tablas, las claves que tienes definidas, los índices definidos y los datos de cada tabla es difícil saber qué está pasando.
Deberías acceder al PLAN de la consulta con alguna herramienta que te permita consultarlo.
Ahí deberías poder ver qué parte te está ralentizando la consulta.

Habría que saber de qué tipo son los campos DOI_CLIENTE y CLIENTE y los valores diferentes que tienen en la tabla.

No tiene nada que ver que tengas:
* 1.000.000 de registros con 3 valores diferentes.
* 1.000.000 de registros con 900.000 valores diferentes.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
SQL muy lenta la 1ª vez ARPE1 Firebird e Interbase 39 29-11-2012 08:56:37
Conexion Con Interbase/FireBIrd lenta...muy lenta federiconqn21 Firebird e Interbase 3 11-03-2010 14:13:34
Ayuda con consulta lenta, lenta, lenta Gregory Mazon Firebird e Interbase 22 27-06-2007 10:56:38
Vista demasiado lenta!!! Hotmago Firebird e Interbase 7 03-06-2005 11:08:52
Impresion lenta, muy lenta... Perio Impresión 2 20-05-2005 14:10:00


La franja horaria es GMT +2. Ahora son las 11:49:53.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi