perché blevel è nullo per alcuni indici in Oracle DB?

Stavo cercando di vedere i livelli b-tree per gli indici e con mia sorpresa ho visto che alcuni di essi sono impostati su null.

SELECT index_name, blevel FROM user_indexes ORDER BY 2 desc; 

Il loro nome inizia con “SYS _” (immagine allegata di seguito). Quindi presumo che siano indici generati dal sistema? Forse delle chiavi primarie? In entrambi i casi sono curioso di sapere perché sono nulli. Posso capire se il valore è 0, il che significa che tutto è nei nodi foglia e ci vorrà solo 1 salto per la scansione univoca per ottenere i dati.

inserisci qui la descrizione dellimmagine

Commenti

  • Sembrano oggetti schema sys quindi potrebbe giocare secondo le proprie regole. Ma la risposta più probabile è che non ci sono affatto nodi.
  • Per un bel po di colonne di statistiche (incluso blevel) in *_indexes documenti dice " I nomi delle colonne seguiti da un asterisco vengono popolati solo se si raccolgono statistiche sullindice utilizzando listruzione ANALYZE o il pacchetto DBMS_STATS. " Immagino che il motore non ' esegua uno di questi comandi su alcuni o tutti gli indici delle tabelle di sistema …
  • Quelli sono indici lob, potrebbe essere una proprietà degli indici lob. Puoi provare a raccoglierli ma non sono sicuro di cosa farebbe Oracle internamente.

Answer

Indici il cui nome che inizia con SYS_IL.. sono indici LOB.

BLEVEL è una proprietà degli indici B-tree e non ha senso per gli indici LOB.

Anche se raccogli statistiche, BLEVEL per tale indice rimarrà nullo.

Rispondi

Grazie @Balazs per le informazioni.

Ho fatto qualche ricerca su questo aspetto e sembra che –

Un pallonetto è semplicemente un puntatore e punta a un blocco di dati che compone quel pallonetto. Pertanto, quando crei una colonna lob, ottieni automaticamente un indice lob in modo che i blocchi di dati lob vengano recuperati più velocemente e il segmento che li contiene.

Utilizza le seguenti query per verificare lo stesso –

SELECT index_name,INDEX_TYPE, blevel FROM user_indexes where blevel is null and index_name like "SYS_IL%%" ORDER BY 3 desc; 

Per vedere i segmenti associati –

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%%" ); 

Puoi eliminarlo trascinando la tabella con la colonna lob o la colonna stessa.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *