27/01/2009, 13:51
|
| | | Fecha de Ingreso: febrero-2005
Mensajes: 6
Antigüedad: 19 años, 10 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!! |