Ver Mensaje Individual
  #1  
Antiguo 26-05-2007
aprendiz2 aprendiz2 is offline
Miembro
 
Registrado: dic 2006
Posts: 70
Reputación: 18
aprendiz2 Va por buen camino
SQL se pone lento

Hola otra vez ! Quizas alguien puediese enseñarme cual es la forma correcta de expresar una pregunta en SQL, para lograr buena velocidad de respuesta.

Problema a resolver: Mejorar la velocidad de respuesta.

( He probado de muchas formas, pero no logro la velocidad, y pienso que la respuesta deberia ser instantanea...pero no se como se hace )

Tablas tipo Paradox, Delphi 5, en red.

Para asociarlo con la realidad, asumir que tenemos 3 tablas

Cita:
Productos
Encabezados ( Encabezado de una factura, digamos )
Detalles ( detalles de las facturas, relacion con Encab y Prod. )

- Productos se relaciona con Detalles, a traves de "CodigoProducto"
- Encabezado se relaciona con Detalles, a traves de "Consecutivo".
( no describire todos los campos, es solo un ejemplo sencillo ).


Cita:
Descrito en palabras, se trata de obtener lo siguiente:

Para un producto X,
obtener todos los Detalles que le corresponden,
añadiendo como limitante un rango de fechas ( Fecha esta en Encabezado )
Código SQL [-]
Select  Detalles.CampoX,
          Encabezados.CampoY,
          Productos.CampoZ
 
from    Detalles, Encabezados, Productos
 
where  (Detalles.CodigoProducto = :xCodigoProducto) and
          (Productos.CodigoProducto = Detalles.CodigoProducto) and
          (Detalles.Consecutivo = Encabezado.Consecutivo) and
          (Encabezado.Fecha between :FechaDesde and :FechaHasta)

Asumir que hay indices en todos los campos que relacionan las tablas, inclusive en Fecha

Quien provoca la lentitud, es la condicion del rango de fechas. ( al quitar esta condicion, se nota una buena diferencia en el tiempo de respuesta ).

Cual seria la mejor forma de expresar la pregunta en SQL? Me he cansado de probar diferentes formas, pero no logro la respuesta "instantanea" que deseo.

La unica forma que he encontrado de hacerlo "instantaneo", es descartar el SQL por completo, enlazar Productos y Detalles en Master / Detail, poniendo el rango de fechas como un filtro dentro del Detail, con un poquito de programacion, para buscar el registro que corresponde en el Encabezado.

Quisiera aprender a usar bien el SQL, para sacarle el mayor provecho posible, y pienso que algo estoy haciendo mal, porque no logro la velocidad.

Muy agradecido !

Última edición por aprendiz2 fecha: 26-05-2007 a las 01:12:14.
Responder Con Cita