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 Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 21-06-2007
Gregory Mazon Gregory Mazon is offline
Miembro
 
Registrado: jun 2003
Posts: 22
Poder: 0
Gregory Mazon Va por buen camino
Unhappy Ayuda con consulta lenta, lenta, lenta

Hola foro, por lo regular no pregunto por que casi todo lo encuentro en las busquedas pero esta ocasion si necesito de su ayuda. Espero me puedan ayudar

Trabajo con D7 Interbase 6 y utilizo componentes IBX

Estoy realizando un sistema para una cadena de tiendas, en donde tengo un reporte de ventas x articulo, todo iba bien pero con el tiempo el reporte se tarda 10 MINUTOS en mostrarlo. Este reporte debe de mostrar cuantos articulos se han vendido en toda la cadena en un rango de fechas, para este reporte hago una consulta sobre una vista en donde se sacan datos de 2 tablas basicamente detalle y maestro

mi vista es la siguiente:
Código SQL [-]
CREATE VIEW VDETALLE(
    IDTIENDA,
    IDREFER,
    IDARTICULO,
    FECHA,
    REFER,
    CANTIDAD,
    PRECIO,
    COSTO,
    DESCUENTO,
    DESCUENTOGRAL,
    PVNETO)
AS
select  d.idtienda, d.idrefer, d.idarticulo, m.fecha, m.refer,
d.cantidad, d.precio, d.costo, d.descuento, m.Descuento,
d.Precio * (1 - (100-(100 * (100-d.Descuento)/100) * (100-m.Descuento)/100) /100)
from detalle d
Left join maestro m on m.idTienda = d.idtienda and m.idRefer = d.idRefer;

La consulta que estoy realizando es:
Código SQL [-]
Select sum(d.Cantidad) Cantidad, sum(d.cantidad*d.pvNeto) Venta,
sum(d.cantidad * d.costo) Costo, d.idarticulo
from vDetalle d
Where d.fecha between :wDate1 and :wDate2 
Group by d.idArticulo

Código:
 
Tabla Maestro:
  idTienda       Integer                          (llave primaria)
  idRefer        Integer                           (llave primaria) 
  Fecha          Date
  Refer          Char(10)
  Nombre         VarChar(70)
  Impuesto       Numeric    12   2
  Importe        Numeric    12   2
  Costo          Numeric    12   2
  Unidades       Integer
  Descuento      Numeric    5  2

Tabla detalle:
   idTienda      Integer               (llave primaria)
   idRefer       Integer                (llave primaria)
   idArticulo    Integer                (llave primaria)
   Cantidad      Integer
   precio         Numeric   10    2
   costo         Numeric   10    2
   Descuento     Numeric    5    2
Nota: La tabla maestro tiene cerca de 2,000,000 de registros y la de detalle tiene aprox. 3,300,000 registros, la DB mide 1.3Gb y esta en un servidor windows 2000 server con 1Gb en RAM y se conectan unos 120 usuarios simultaneamente. Lo mas importante en la tabla de detalle se insertan unos 30,000 registros al dia

Cualquier sugerencia se los agradece y de antemano muchas gracias
Responder Con Cita
  #2  
Antiguo 21-06-2007
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Me extraña mucho, seguro que necesitas leer los 2 0 3 millones de registros de una tabla?, muy raro, normalmente uno lo que hace es un acomodo de la informacion, osea, que el reporte devuelva solo lo que interesa.
Yo aparte de esto usaria un Limit 50 en la consulta.
No se, solo opino.
Saludos
Responder Con Cita
  #3  
Antiguo 21-06-2007
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.286
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
Yo haría algunas pruebas con SP's.
Intentar primero "cortar" las tablas con los WHERE para hacerlas más pequeñas y volcarlas a temporales y luego aplicar la Join.
Asegurate de que los índices son correctos.
Otra opción es mantener los cálculos por trigger (para tenerlos ya hechos), eso minimizará las consultas posteriores, aunque desconozco si es viable en este caso.

Revisa el plan de ejecución si es posible para ver lo que se está haciendo y los tiempos de las distintas operaciones.
__________________
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
  #4  
Antiguo 21-06-2007
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.043
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Además de tener muy en cuenta las recomendaciones de los compañeros, también ganarás muchísimo, muchísimo, muchísimo... si cambias ese obsoleto Interbase 6 por un Firebird 1.5 (interbase 6 es de 1999), no creo que tengas problema alguno, ya que son básicamente compatibles.
Por supuesto, otra necesidad muy, muy, muy importante: cambia ese windows 2000 por un Linux: Debian, Suse, Ubuntu, RedHat... la que quieras, pero cámbialo.
Ganarás muchíiiiiiiiiiiiiiiiiisimo, te lo aseguro.
Responder Con Cita
  #5  
Antiguo 21-06-2007
Gregory Mazon Gregory Mazon is offline
Miembro
 
Registrado: jun 2003
Posts: 22
Poder: 0
Gregory Mazon Va por buen camino
Muchas gracias por sus comentarios.

Pero aqui realmente el problema por lo que he podido checar no es tanto los 2 o 3 millones de registros, sino el Where d.fecha between :wDate1 and :wDate2, este campo se encuentra en al tabla maestro, por cierto ya intente poner un indice sobre este campo pero no mejora la velocidad, tambien ya intente hacer SP's y no me resultan
Cita:
Empezado por Casimiro Notevi
si cambias ese obsoleto Interbase 6 por un Firebird 1.5
cambia ese windows 2000 por un Linux: Debian, Suse, Ubuntu, RedHat...
He oido maravillas sobre esos servidores pero de momento no tengo nada para hacer pruebas. Firebird 1.5 lo voy a instalar para ver como me funciona, pero con esto una duda:
puedo tener en el server Firebird y en las terminales IB?
pregunto esto por que las terminales se conectan de forma remota (VPN) y para porder cambiar TODAS estas terminales seria algo que me llevaria algunos dias

Hay manera de poner indeces a las vistas?
Responder Con Cita
  #6  
Antiguo 21-06-2007
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.043
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por Gregory Mazon
[..]puedo tener en el server Firebird y en las terminales IB? pregunto esto por que las terminales se conectan de forma remota (VPN) y para porder cambiar TODAS estas terminales seria algo que me llevaria algunos dias [..]
Poder, poder... puedes, aunque no es una buena idea hacerlo, más bien puede ser una fuente de problemas ocultos.
Responder Con Cita
  #7  
Antiguo 21-06-2007
Avatar de RolphyReyes
RolphyReyes RolphyReyes is offline
Miembro
 
Registrado: ago 2004
Ubicación: Santo Domingo
Posts: 285
Poder: 20
RolphyReyes Va por buen camino
Talking

Saludos.

Yo opino que si te vas a cambiar a FireBird que sea a la 2.0.1 que es bastante estable tiene muchas mejoras y funciones ademas de muchos bugs corregidos.
__________________
Gracias,
Rolphy Reyes
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
Consulta Super Lenta AGAG4 SQL 4 03-04-2006 19:36:50
Primera consulta, mas lenta que el caballo del malo papulo Conexión con bases de datos 20 23-09-2005 13:46:24
Impresion lenta, muy lenta... Perio Impresión 2 20-05-2005 13:10:00
Consulta muy lenta Walterdf Conexión con bases de datos 2 25-08-2004 18:37:57
lenta la consulta. digital Conexión con bases de datos 2 10-09-2003 15:38:13


La franja horaria es GMT +2. Ahora son las 22:18:44.


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