Ver Mensaje Individual
  #6  
Antiguo 06-11-2003
__cadetill __cadetill is offline
Miembro
 
Registrado: may 2003
Posts: 3.387
Reputación: 27
__cadetill Va por buen camino
Hola Virginia

Veamos. Si lanzas esta consulta desde otro programa externo a Delphi (IB-Expert o similares) te tarda?? (poniendo, claro está, el NUMALU que quieras)

Código:
select D1.NUMALU, D1.CODIGO, D1.NUMGRUP, D1.FECINI, D1.CAUBAJA,
       D1.FECFIN, D1.CODVTO, D1.NUMEMPLEADO, D2.PRODUCTO, D2.ALIAS,
       D2.NUMGRUP, D3.PRODUCTO, D3.DESCRIP, D4.CODIGO, D4.DESCRIPCION,
       D5.NUMGRUP, D5.DESCRIPCION, D5.CODVTO, D6.NUMEMPLEADO, D6.PROFESOR
from MATRI D1
        inner join GRUPOS D2 on (D2.NUMGRUP = D1.NUMGRUP)
        inner join CAUBAJA D4 on (D4.CODIGO = D1.CAUBAJA)
        inner join PROFE D6 on (D6.NUMEMPLEADO = D1.NUMEMPLEADO)
        inner join PRODU D3 on (D3.PRODUCTO = D2.PRODUCTO)
        inner join VTOS D5 on (D5.NUMGRUP = D1.NUMGRUP and D5.CODVTO = D1.CODVTO)
where
  (D1.NUMALU=:NUMALU)
order by D1.NUMALU, D1.CODIGO
PD: he modificado algo la consulta, pero en el fondo es la misma

Cita:
Giniromero comentó:
También yo estaba planteándome esta opción, pues, efectivamente, una de las tablas es muy grande, concretamente la tabla Vtos.
En la consulta la he puesto al final. Mira de jugar un poco con ello a ver si ganas tiempo

Cita:
Giniromero comentó:
Tengo conectada la consulta, por el datamodule, al DataSource de alumnos. Si en el selectSQL le pongo que NUMALU=:NUMALU, para cualquier otra tabla, solo con eso, me estaría filtrando los registros, de modo que sólo vería los del NUMALU activo.
Pero parece que eso lo hace a la vez que todo lo demás. ¿Cómo hago en este caso lo de juntar las tablas más peques y luego las grandes?
Cuando lanzas un SQL, no puedes primero lanzar un cacho y luego otro Si se lanza, se lanza toda, sino, no se lanza Lo que te comentaba en el mensaje anterior era que, primero, hicieras las uniones con las tablas pequeñas y luego con las grandes. Para ello, sólo has de cambiar el orden de los AND o bien (si sigues mi ejemplo, el de los inner join

Cita:
Giniromero comentó:
El único índice que me preocupa algo es, precisamente el de la tabla Vtos, pues no sé si por que la primary key sea de dos campos se tienen que tratar en los where de distinta forma para que no de problemas.
En principio lo haces bien, ya que estás utilizando todo el índice (y no parte de él) en la consulta. Si utilizas parte, pero es por orden de campos importante (es decir, en tu caso el de más peso sería NUMGRUP y luego CODVTO) no pasa nada tampoco. Sólo es cuando utilizas parte del índice pero que no por orden de importancia (no se si me explico :s)

Cita:
Giniromero comentó:
¿Podrías, por favor, decirme como va?
Bueno, yo sólo lo utilicé una vez por el tema de un SQL que tb me iva lento. Lo que has de hacer es decirle que quieres que te trazée (TraceFlags) que, en principio creo que con Prepare, Execute y Fetch tendrás suficiente. Luego, has de capturar el único evento que tiene (OnSQL) y, por ejemplo, lo vas añadiendo a un TMemo (recives como parámetro el evento y la fecha/hora) o a un fichero de texto.

Creo recordar que no tenía más secreto que ese :s

Cita:
Giniromero comentó:
Muchas gracias.....
Pues de nada
Responder Con Cita