Ver Mensaje Individual
  #4 (permalink)  
Antiguo 28/08/2012, 08:52
Avatar de gnzsoloyo
gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: "Snapshot too old usando un indice sobre una fecha ¿?

Todos los datos son DATE, tanto las dos variables, como el campo indexado (TIEMPO).
En realidad del tipo de datos del resto de las columnas es medio irrelevante, porque jamás las usaremos, ni las consultamos, pero si quieres saberlo cuatro son NUMBER y una es VARCHAR(1000).
De todos modos el mayor de los misterios y la razón del post es el siguiente:
- Sabemos a ciencia cierta que hay apenas algunos miles de registros entre fechaHasta y el registro más antiguo (alrededor de 47.000).
- Si enviamos a buscar el rango como lo pongo en el primer caso, nos devuelve el dato instantáneamente (0,44 segundos).
- Si lo enviamos a buscar por "< fechahasta", se cae por snapshot too old, luego de varios minutos.
- Si envío a buscar una fecha anterior al más antiguo que exista, caso en que debería devolver NULL, se cae por snapshot too old, luego de varios minutos.

Entonces la pregunta es: ¿Por qué pierde tiempo buscando un dato que no existe (la primera entrada del indice es mayor a ese valor), y por qué, en el segundo caso, pese a tener pocos registros (hay entradas, pero son pocas), tarda tanto y se cae?

Es ese punto el que tenemos que resolver: Necesitamos que no pierda tiempo leyendo si no tiene registros o bien, que tarde poco si los tiene.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)