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.
Commenti
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.
*_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 …