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):
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:
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';
Esta 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.