Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 09-09-2010
toni.vi toni.vi is offline
Miembro
 
Registrado: may 2003
Ubicación: Sant Fost(Barcelona)
Posts: 102
Poder: 22
toni.vi Va por buen camino
Sql lenta la primera vez

Utilizo D7 y FB1.5 me ocurre que la primera vez que ejecuto la sql de abajo me va lento aproximadamente tarda 1 minuto.
Si la vuelvo a ejecutar posteriormente ya va rapida unos 2 segundos.
Para que vaya lenta debo cerrar el pc y encenderlo de nuevo.
Código SQL [-]
Select  a.ARTICULO,a.DESCRIPCION
, (Select Sum (b.ENTRADAS - b.SALIDAS) from HISTORICO b  where b.ARTICULO = a.ARTICULO) as Stock
From ARTICULOS a
WHERE ARTICULO > 0
en Historico y en Articulos existe una clave para ARTICULO.
Todas las claves estan activas.
¿Alguna sugerencia?
Responder Con Cita
  #2  
Antiguo 09-09-2010
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.077
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
El problema es que debe recorrer por completo la tabla de 'historico' para hacer el sum() de los campos 'salidas' y 'entradas'.
Y se supone que en 'historico' tienes muchos registros.
Y por si fuese poco, lo tiene que recorrer por cada artículo.

Yo probaría primero con el 'select sum()' con cualquier artículo para ver cómo se comporta, y una vez afinado ese select es cuando lo probaría por completo.
Responder Con Cita
  #3  
Antiguo 09-09-2010
elarys elarys is offline
Miembro
 
Registrado: abr 2007
Posts: 94
Poder: 18
elarys Va por buen camino
Digamos que tu consulta es simplemente muy fea jajaja, ahora veamos como podria ser para acelerar un poco el sql
Responder Con Cita
  #4  
Antiguo 09-09-2010
elarys elarys is offline
Miembro
 
Registrado: abr 2007
Posts: 94
Poder: 18
elarys Va por buen camino
Usaria algo como esto... alguien tiene una mejor idea

Código SQL [-]
Select  a.ARTICULO,a.DESCRIPCION,
  (SUM(b.ENTRADAS)-SUM(b.SALIDAS)) as Stock
From ARTICULOS a
LEFT JOIN HISTORICO b ON (b.ARTICULO = a.ARTICULO)
WHERE a.ARTICULO > 0 GROUP BY a.ARTICULO

Tambien podria ser INNER JOIN en lugar de LEFT JOIN pero eso lo dejo a criterio del creador de la base de datos

Última edición por elarys fecha: 09-09-2010 a las 22:42:28.
Responder Con Cita
  #5  
Antiguo 09-09-2010
toni.vi toni.vi is offline
Miembro
 
Registrado: may 2003
Ubicación: Sant Fost(Barcelona)
Posts: 102
Poder: 22
toni.vi Va por buen camino
Hay unos 7500 articulos y 95.000 registros en historico.
Con la consulta que me propones, continúa siendo lenta la primera vez.
Ahora en vez de 1 minuto esta unos 30 segundos, y el resto de veces es más o menos igual.
Lo que no entiendo es porque la primera vez es más lenta y despues más rápida.
Estoy haciendo la consulta con IBExpert.
Incluso parando el motor de base de datos y arrancando de nuevo, continúa siendo rápido.
Pero si cierro el pc y lo reinicio vuelvo a ser lento la primera vez.

Por cierto, casimiro, si primero hago un
Código SQL [-]
select count(*) from historico
o
select sum(entradas) from historico
Cuando hago la select normal ya funciona rápido.
Es como si tuviera que ver recorrerse una vez el historico.....
Responder Con Cita
  #6  
Antiguo 09-09-2010
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.077
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Pero si haces esa primera vez: select count(*) from historico
¿es lento también?

Pásanos la estructura de la tabla
Responder Con Cita
  #7  
Antiguo 09-09-2010
toni.vi toni.vi is offline
Miembro
 
Registrado: may 2003
Ubicación: Sant Fost(Barcelona)
Posts: 102
Poder: 22
toni.vi Va por buen camino
No, si hago primero el select count o select sum(), la primera vez ya funciona rapido.
Puedo enviarte la base de datos solo con las 2 tablas, ocupa 1,5Mb en rar.
Responder Con Cita
  #8  
Antiguo 10-09-2010
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.077
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
envíamelo por email, si quieres
Responder Con Cita
  #9  
Antiguo 10-09-2010
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.077
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Bueno, he estado haciendo algunas pruebas y no he detectado lentitud en ningún caso, ni la primera vez... ni ninguna
Código:
Select  a.ARTICULO,a.DESCRIPCION,
       (Select Sum (b.ENTRADAS - b.SALIDAS) 
        from HISTORICO b  
        where b.ARTICULO = a.ARTICULO) as Stock
From ARTICULOS a 
WHERE ARTICULO > 0  // <-- es un campo varchar(20), pon: where a.articulo<>'0'
Cita:
Empezado por flamerobin
Executing...
Done.
32637 fetches, 0 marks, 0 reads, 0 writes.
0 inserts, 0 updates, 0 deletes, 13962 index, 936 seq.
Delta memory: -8748 bytes.
Total execution time: 0,207s
Script execution finished.
Responder Con Cita
Respuesta



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
Conexion Con Interbase/FireBIrd lenta...muy lenta federiconqn21 Firebird e Interbase 3 11-03-2010 13:13:34
Consulta sql lenta la primera vez lledesma Conexión con bases de datos 2 07-07-2008 11:58:36
Ayuda con consulta lenta, lenta, lenta Gregory Mazon Firebird e Interbase 22 27-06-2007 09:56:38
Primera consulta, mas lenta que el caballo del malo papulo Conexión con bases de datos 20 23-09-2005 13:46:24
Primera llamada, primera roman Noticias 12 06-07-2005 21:22:49


La franja horaria es GMT +2. Ahora son las 00:01:43.


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