sábado, 13 de marzo de 2010

Por qué no funciona este índice (oracle)

Compartir

Hoy voy a hablaros un poco de esas situaciones en donde inexplicablemente no sabemos porque está actuando un índice sobre una consulta.

1.- Se devuelven muchos registros.

Aquí está la eterna pelea en cual es el límite en donde el índice deja de funcionar. En algunos libros se fija en el 5%, otros en el 10% y en algunas de las pruebas realizadas en mis clases de Administración de bases de datos se situaba en el 31%.

2.- Conversiones de datos implícitas.

A veces nos encontramos con algunas consultas que llevan implícitas algún tipo de conversión.

3.- No hay estadísticas.

El optimizador de la base de datos construye un plan de ejecución basado enteramente en estadísticas de los objetos, almacenadas en el dicionario de datos. La recolección de estas estadísticas debe realizarse periódicamente para que Oracle sepa cuales son los costos asociados a cada método de acceso a los registros, y de esta manera elegir la mejor opción. Al insertar y eliminar datos frecuentemente, cambian las estadísticas quedan obsoletas, y esto puede traer aparejado un impacto directo en la performance de las consultas.

Pueden recolectarse estadísticas de todo el esquema, de una tabla, de un índice, del sistema. El paquete DBMS_STATS contiene procedimientos para hacer el trabajo: GATHER_TABLE_STATS, GATHER_INDEX_STATS, GATHER_SCHEMA_STATS.
Para saber si una tabla tiene estadísticas, puede utilizarse la siguiente consulta:

SELECT last_analyzed
FROM user_tables
WHERE table_name = ‘mi_tabla’;

Retorna la fecha de la ultima recolección. Si retorna NULL, entonces nunca fueron recolectadas.

0 comentarios:

Publicar un comentario en la entrada

Gracias por escribir un comentario