¿Por qué blevel es nulo para algunos índices en Oracle DB?

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.

ingrese la descripción de la imagen aquí

Comentarios

  • Parecen objetos de esquema sys, por lo que podría jugar con sus propias reglas. Pero la respuesta más probable es que no hay nodos en ellos.
  • Para bastantes columnas de estadísticas (incluido blevel) en *_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 …
  • Esos son índices lob, simplemente puede ser una propiedad de los índices lob. Puede intentar recopilarlos, pero no estoy seguro de qué haría Oracle internamente.

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í.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *