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