hvorfor er blevel null for noen indekser i Oracle DB?

Jeg prøvde å se b-tre-nivåene for indekser, og til min overraskelse ser jeg at noen av dem er satt til null.

SELECT index_name, blevel FROM user_indexes ORDER BY 2 desc; 

Navnet deres begynner med «SYS _» (bildet vedlagt nedenfor). SÅ jeg antar at de er systemgenererte indekser? Kanskje av primærnøkler? Uansett er jeg nysgjerrig på hvorfor de er null. Jeg kan forstå om verdien er 0, noe som betyr at alt er i bladnoder, og det tar bare 1 hopp for unik skanning for å få dataene.

skriv inn bildebeskrivelse her

Kommentarer

  • De ser ut som sys-skjemaobjekter, slik at de kan spille etter sine egne regler. Men det mest sannsynlige svaret er at det ikke er noen noder i det hele tatt.
  • For ganske mange statistikk-kolonner (inkludert blevel) i *_indexes docs sier " Kolonnenavn etterfulgt av en stjerne blir bare fylt ut hvis du samler inn statistikk over indeksen ved hjelp av ANALYZ-setningen eller DBMS_STATS-pakken. " Jeg antar at motoren ikke ' t utfører noen av disse kommandoene mot noen eller alle systemtabellindekser …
  • Det er lobindekser, det kan bare være en egenskap til lobindekser. Du kan prøve å samle dem, men jeg er ikke sikker på hva oracle ville gjort internt.

Svar

Indekser hvis navn start med SYS_IL.. er LOB-indekser.

BLEVEL er en egenskap for B-treindekser, og gjør ikke gir mening for LOB-indekser.

Selv om du samler inn statistikk, vil BLEVEL for en slik indeks forbli null.

Svar

Takk @Balazs for informasjonen.

Gjorde litt undersøkelser rundt dette og ser ut som –

En lob er rett og slett en peker, og den peker på en dataklump som gjør den til lob. Så når du oppretter en lob-kolonne, får du automatisk en lob-indeks slik at lob-data-biter hentes raskere og segment som inneholder disse data-biter.

Bruk følgende spørsmål for å bekrefte det samme –

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

For å se tilknyttede segmenter –

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 slette dette ved å slippe tabellen som har lob kolonne eller selve kolonnen.

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *