Warum ist blevel für einige Indizes in Oracle DB null?

Ich habe versucht, die B-Tree-Ebenen für Indizes anzuzeigen, und zu meiner Überraschung sind einige davon auf null gesetzt.

SELECT index_name, blevel FROM user_indexes ORDER BY 2 desc; 

Ihr Name beginnt mit „SYS _“ (Bild unten). Ich gehe also davon aus, dass es sich um systemgenerierte Indizes handelt. Vielleicht von Primärschlüsseln? In beiden Fällen bin ich neugierig, warum sie null sind. Ich kann verstehen, ob der Wert 0 ist, was bedeutet, dass sich alles in Blattknoten befindet und nur 1 Sprung für einen eindeutigen Scan erforderlich ist, um die Daten zu erhalten.

Geben Sie hier die Bildbeschreibung ein.

Kommentare

  • Sie sehen also wie Systemschemaobjekte aus könnte nach ihren eigenen Regeln spielen. Die wahrscheinlichste Antwort ist jedoch, dass sie überhaupt keine Knoten enthalten.
  • Für einige Statistikspalten (einschließlich Blevel) in *_indexes docs heißt es " Spaltennamen gefolgt von einem Sternchen werden nur ausgefüllt, wenn Sie mithilfe der ANALYZE-Anweisung oder des DBMS_STATS-Pakets Statistiken zum Index erfassen. " Ich denke, die Engine ' führt keinen dieser Befehle für einige oder alle Systemtabellenindizes aus …
  • Das sind Lob-Indizes, es kann nur eine Eigenschaft von Lob-Indizes sein. Sie können versuchen, sie zu sammeln, aber ich bin nicht sicher, was Orakel intern tun würde.

Antwort

Indizes, deren die Der Name beginnt mit SYS_IL.. sind LOB-Indizes.

BLEVEL ist eine Eigenschaft von B-Tree-Indizes und nicht Dies ist für LOB-Indizes sinnvoll.

Auch wenn Sie Statistiken erfassen, bleibt BLEVEL für einen solchen Index null.

Antwort

Danke @Balazs für die Info.

Hat einige Nachforschungen angestellt und sieht aus wie –

Ein Lob ist einfach ein Zeiger und zeigt auf Daten-Chuncks, die dieses Lob erzeugen. Wenn Sie also eine Lob-Spalte erstellen, erhalten Sie automatisch einen Lob-Index, sodass Lob-Datenblöcke schneller abgerufen werden und ein Segment, das diese Datenblöcke enthält.

Verwenden Sie die folgenden Abfragen, um dasselbe zu überprüfen –

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

Anzeigen der zugehörigen Segmente –

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

Sie können dies löschen, indem Sie die Tabelle mit der Lob-Spalte oder löschen die Spalte selbst.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.