Ver Mensaje Individual
  #5  
Antiguo 12-11-2010
Avatar de guillotmarc
guillotmarc guillotmarc is offline
Miembro
 
Registrado: may 2003
Ubicación: Huelva
Posts: 2.638
Reputación: 24
guillotmarc Va por buen camino
Hola.

Lo primero que te recomiendo es que utilices Joins explícitos, como te recomienda el compañero. Facilita mucho la comprensión de la consulta, y por tanto la optimización de la misma.

Respecto a los índices, el hecho de que la consulta utilice índices para todas las tablas no quiere decir que esos índices sean óptimos. Está claro que en alguna tabla se podría crear una índice que agilizaría mucho más la consulta de lo que hacen los índices actuales.

En todo caso, ante una consulta tan sencilla. Puedes simplemente ir por partes.

Empieza por :

Código SQL [-]
select cabalbcli.ncentro
from cabalbcli
where cabalbcli.lfacturable=0  and cabalbcli.ntipoop=2 and
        (cabalbcli.dfecha >= '10/01/10' and cabalbcli.dfecha <= '10/31/10')

Y después le vas añadiendo una a una las tablas relacionadas.

Código SQL [-]
select cabalbcli.ncentro
from cabalbcli
        inner join linalbcli on  cabalbcli.ncod_albaran = linalbcli.ncod_albaran and cabalbcli.ccod_serie = linalbcli.ccod_serie
where cabalbcli.lfacturable=0  and cabalbcli.ntipoop=2 and
        (cabalbcli.dfecha >= '10/01/10' and cabalbcli.dfecha <= '10/31/10') and
        linalbcli.lenvase=0 and linalbcli.ncantidadvalor < 0  and 
        (linalbcli.ctipolinea='V' or linalbcli.ctipolinea='P' or linalbcli.ctipolinea='R') and
        linalbcli.nenlacefab is null

Cuando la consulta se bloquee, ya sabes en que unión tienes que añadir un índice que permita localizar rapidamente sus registros.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no).
Responder Con Cita