Estaba tratando de ver los niveles del árbol b para los índices y, para mi sorpresa, veo que algunos de ellos están configurados como nulos.
SELECT index_name, blevel FROM user_indexes ORDER BY 2 desc;
Su nombre comienza con «SYS _» (imagen adjunta a continuación). Entonces, ¿estoy asumiendo que son índices generados por el sistema? ¿Quizás de claves primarias? De cualquier manera, tengo curiosidad por saber por qué son nulos. Puedo entender si el valor es 0, lo que significa que todo está en nodos de hoja y solo se necesitará 1 salto para que el escaneo único obtenga los datos.
Comentarios
Responder
Índices cuyo el nombre que comienza con SYS_IL..
son índices LOB.
BLEVEL
es una propiedad de los índices de árbol B y no tiene sentido para los índices LOB.
Incluso si recopila estadísticas, BLEVEL
para dicho índice seguirá siendo nulo.
Respuesta
Gracias @Balazs por la información.
Investigué un poco sobre esto y parece que:
Un lob es simplemente un puntero y apunta a fragmentos de datos que forman ese lob. Entonces, cuando crea una columna lob, obtiene automáticamente un índice lob para que los fragmentos de datos lob se recuperen más rápido y el segmento que contiene estos fragmentos de datos.
Utilice las siguientes consultas para verificar lo mismo:
SELECT index_name,INDEX_TYPE, blevel FROM user_indexes where blevel is null and index_name like "SYS_IL%%" ORDER BY 3 desc;
Para ver los segmentos asociados –
select segment_name, segment_type, tablespace_name, bytes, max_extents from user_segments where segment_name in ( SELECT index_name FROM user_indexes where blevel is null and index_name like "SYS_IL%%" );
Puede eliminar esto eliminando la tabla que tiene la columna lob o la columna en sí.
*_indexes
docs dice " Los nombres de las columnas seguidos de un asterisco se completan solo si recopila estadísticas sobre el índice utilizando la instrucción ANALYZE o el paquete DBMS_STATS. " Supongo que el motor no ' no ejecuta ninguno de estos comandos contra algunos o todos los índices de las tablas del sistema …