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 06-10-2010
Avatar de chinosoft
chinosoft chinosoft is offline
Miembro
 
Registrado: nov 2006
Posts: 28
Poder: 0
chinosoft Va por buen camino
Unhappy Optimizar consulta con Union ALL

Buenas:

¿Como podria optimizar esta consulta?.

Me demora casi 2hs en devolverme el resultado.

¡Cualquier sugerencia sera bienvenida!

Desde ya ¡Muchas Gracias!

Código SQL [-]
Select 
  Acumulados.Codigo, Sum(Kilos) As TotalKilos 
From 
  (Select codigomaster1 Codigo, Sum(kilosmaster1) As Kilos 
    From 
      preparacion Group By codigomaster1 
        Union ALL 
          Select codigomaster2 Codigo, Sum(kilosmaster2) As Kilos From preparacion Group By codigomaster2 
            Union ALL Select codigomaster3 Codigo, Sum(kilosmaster3) As Kilos From preparacion Group By codigomaster3) As Acumulados Group By Acumulados.Codigo
__________________
:D chinosoft - only
Responder Con Cita
  #2  
Antiguo 06-10-2010
Luis F. Orjuela Luis F. Orjuela is offline
Miembro
 
Registrado: may 2003
Ubicación: Bogotá - Colombia
Posts: 68
Poder: 21
Luis F. Orjuela Va por buen camino
La experiencia dice que: "divide y vencerás...".

Por lo tanto utiliza procedimientos almacenados dentro de la base de datos para que éstos te hagan calculos intermedios y por último generas la consulta con los resultados obtenidos...

Recuerda que todo lo que se haga dentro del motor de base de datos será mil veces más rápido que cuando se hace desde el cliente.

Cordialmente:
__________________
Ing. LUIS FERNANDO ORJUELA
BOGOTA - COLOMBIA
Responder Con Cita
  #3  
Antiguo 06-10-2010
Avatar de guillotmarc
guillotmarc guillotmarc is offline
Miembro
 
Registrado: may 2003
Ubicación: Huelva
Posts: 2.638
Poder: 23
guillotmarc Va por buen camino
A la vista de la consulta, los únicos índices que veo que vale la pena tener son 3 índices para la tabla Praparacion, uno para CodigoMaster1, otro índice para CodigoMaster2 y un tercer índice para CodigoMaster3.

NOTA: Si tienes una tabla con los Codigos, seguramente se ejecutará mas rápido esta consulta (que da el mismo resultado):

Código SQL [-]
select codigo,
         coalesce((select sum(kilosmaster1) from preparacion where codigomaster1 = codigo), 0) +
         coalesce((select sum(kilosmaster2) from preparacion where codigomaster2 = codigo), 0) +
         coalesce((select sum(kilosmaster3) from preparacion where codigomaster3 = codigo), 0) as kilos        
from codigos

Naturalmente sigues necesitado un índice independiente para cada campo codigomaster1/2/3

Saludos.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no).
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
Ayuda con consulta de Union'¡¡¡¡ Poke SQL 3 12-05-2010 18:03:58
optimizar consulta martinchooozzz SQL 5 15-12-2009 18:11:42
Optimizar Consulta - algoritmo jmartinez MySQL 2 28-08-2007 17:06:37
Optimizar Consulta en Firebird AGAG4 Firebird e Interbase 14 10-01-2006 02:11:30
Optimizar Consulta dunia_lv MS SQL Server 2 21-04-2005 09:43:51


La franja horaria es GMT +2. Ahora son las 03:21:03.


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