Ver Mensaje Individual
  #3 (permalink)  
Antiguo 27/01/2009, 13:51
Avatar de todotresde
todotresde
 
Fecha de Ingreso: febrero-2005
Mensajes: 6
Antigüedad: 19 años, 2 meses
Puntos: 0
Respuesta: Consulta Lenta

Gracias kikolice por la respuesta. Pero me pasaron la siguiente solucion:

La tabla SE_MOVIMIENTOS tiene varios indices, entre ellos esta


IDX_ACTOR_TACTOR_FMOVIMIENTO (cod_actor, cod_tipactor, fec_movimiento)
IDX_SE_MOV_FECHA(fec_movimiento)


En el where de tu consulta tenes:

m.COD_TIPMOV != 7
AND m.COD_TIPMOV != 9
AND FEC_MOVIMIENTO >= to_date ('01/01/2009', 'dd/mm/yyyy')
AND FEC_MOVIMIENTO <= to_date ('30/01/2009', 'dd/mm/yyyy')
AND COD_TIPMOV = 5
AND m.COD_ACTOR = 2744

Los campos que nos interesan con COD_ACTOR y FEC_MOVIMIENTO

Al ser cod_actor una igualdad (cod_actor = 2744) Oracle elige el indice IDX_ACTOR_TACTOR_FMOVIMIENTO para resolver la consulta. Como el campo cod_tipactor no lo nombro en el WHERE el resto de los campos del indice no son usados.

Para obligar a Oracle que elija el índice por FEC_MOVMIENTO ( que es un rango y no una igualdad) tengo 2 opciones:

1) Le aplico una operación al campo COD_ACTOR para invalidar el indice que comienza con COD_ACTOR:
AND m.COD_ACTOR+0 = 2744
2) Utilizo un Hint especifico para indicarle que use ese índice:
SELECT /*+ INDEX(m IDX_SE_MOV_FECHA */


Asi la consulta demora segundos.


Gracias Carolina!!