varför är blevel null för vissa index i Oracle DB?

Jag försökte se b-trädnivåerna för index och till min förvåning ser jag att några av dem är inställda på null.

SELECT index_name, blevel FROM user_indexes ORDER BY 2 desc; 

Deras namn börjar med ”SYS _” (bilden bifogas nedan). SÅ jag antar att de är systemgenererade index? Kanske av primärnycklar? Hur som helst är jag nyfiken på varför de är noll. Jag kan förstå om värdet är 0 vilket betyder att allt finns i bladnoder och det tar bara 1 hopp för unik skanning för att få data.

ange bildbeskrivning här

Kommentarer

  • De ser ut som sys schemaobjekt så att de kan spela efter sina egna regler. Men det mest troliga svaret är att det inte finns några noder alls.
  • För en hel del kolumner för statistik (inklusive blevel) i *_indexes docs säger " Kolumnnamn följt av en asterisk fylls bara i om du samlar in statistik om indexet med ANALYZE-satsen eller DBMS_STATS-paketet. " Jag antar att motorn inte ' t utför någon av dessa kommandon mot några eller alla systemtabellindex …
  • Det är lobindex, det kan bara vara en egenskap hos lobindex. Du kan prova att samla dem men jag är inte säker på vad oracle skulle göra internt.

Svar

Index vars namn start med SYS_IL.. är LOB-index.

BLEVEL är en egenskap för B-trädindex och gör inte vara meningsfullt för LOB-index.

Även om du samlar in statistik förblir BLEVEL för ett sådant index noll.

Svar

Tack @Balazs för informationen.

Forskade kring detta och ser ut som –

En lob är helt enkelt en pekare och den pekar på en dataklump som gör den till lob. Så när du skapar en lob-kolumn får du automatiskt ett lob-index så att lob-databitar hämtas snabbare och segment som innehåller dessa databitar.

Använd följande frågor för att verifiera detsamma –

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

För att se associerade segment –

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

Du kan radera detta genom att släppa den tabellen som har lobkolumn eller själva kolumnen.

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *