El otro día en clase (llamarle clase siendo que soy el único que va a clase) estábamos Jorge Lloret (mi profesor) y yo corrigiendo unos ejercicios sobre costes. Me encontré con un problema curioso. Los resultados que obtenía con una tabla similar a la de mi profesor eran anómalos. Los índices actuaban cuando les daba la gana y daban costes imposibles. Bueno, pero el tema de la posesión infernal de mi ordenador lo dejaremos para otro día. Lo que sí que quería comentar es una cosa curiosa que comprobamos. Estamos siguiendo el libro Oracle High Performance tuning for 9i and 10g. En él, el autor, nos indica que los índices actúan sólo cuando el resultado está alrededor del 10% de las filas de la tabla. Bien, decidimos crear una tabla con 100000 filas. Una de las columnas con el nombre número iba del 1 al 100.000. Bien, creamos un índice en la columna número y realizamos la consulta: SELECT * FROM tabla WHERE numero < 10000. Bien, comprobamos el coste y vimos que el índice había actuado. Todo correcto hasta aquí. Ahora tocaba ver como con un resultado mayor al 10% no entraban en juego los índices. Probamos < 15000 ups, funciona, probamos < 20000 ups, funciona… así hasta <31250 ups, el índice actuaba hasta el 31%. ¿cómo podía ser? ¿el autor del libro se equivocó al determinar ese 10%? Bueno, siguiente idea que se nos pasó por la cabeza, si ha llegado al 31% con < 31250, con >70000 también tendría que actuar el índice, no? pues… no. Así sólo actuaba con >85000 un 15% y más aproximado a lo que ponía el libro. Entonces… ¿dónde está el límite? ¿por qué si empezamos por delante o por detrás son valores distintos??? Lo que decía, los índices y yo, esa gran tragedia.