Oracle reconstruir índices y estado

En tablas donde hay cambios constantemente como un mantenimiento más de la BD, hay que reconstruir los índices B-TREE de forma periódica, por ejemplo (la sintaxis es más compleja):

Source   
ALTER INDEX SCOTT.PK_EMP REBUILD;

Un B-TREE ideal tiene todas las ramas perfectamete equilibradas, un B-TREE degradado puede ofrecer tiempos de búsqueda lineales en lugar de logarítmicos debido a un fuerte desequilibrio.

Para determinar si un índice debe ser reconstruido:

Source   
ANALYZE INDEX SCOTT.PK_EMP VALIDATE STRUCTURE;
SELECT * FROM INDEX_STATS I WHERE i.del_lf_rows/i.lf_rows > 0.3 OR i.height>5 OR i.lf_rows<i.lf_blks AND i.name='PK_EMP';

B-tree-searchEsta consulta devuelve el índice que ha borrado más del 30% de los valores totales (i.del_lf_rows/i.lf_rows > 0.3), que la profundidad del B-TREE es superior a 4 (i.height>5) o que el número de bloques es mayor que el número de valores (i.lf_rows<i.lf_blks).

Hay que tener en cuenta que la profundidad del índice depende del tamaño del bloque y el tamaño del índice. Lo ideal es conocer el valor una vez reconstruido el índice y fijarlo como una especie de baseline que más tarde utilizaremos con un pequeño incremento (no más de 2 profundidades) para determinar si hay que realizar un rebuild.

Deja un comentario