hvorfor er blevel null for nogle indekser i Oracle DB?

Jeg forsøgte at se b-træ-niveauer for indekser og til min overraskelse ser jeg, at nogle af dem er indstillet til null.

SELECT index_name, blevel FROM user_indexes ORDER BY 2 desc; 

Deres navn starter med “SYS _” (billede vedhæftet nedenfor). SÅ jeg antager, at de er systemgenererede indekser? Måske af primære nøgler? Uanset hvad er jeg nysgerrig efter, hvorfor de er nul. Jeg kan forstå, om værdien er 0, hvilket betyder, at alt er i bladnoder, og det tager bare 1 hop for unik scanning for at få dataene.

indtast billedebeskrivelse her

Kommentarer

  • De ligner sys-skemaobjekter, så de kan spille efter deres egne regler. Men det mest sandsynlige svar er, at der slet ikke er nogen noder i dem.
  • For en hel del statistik-kolonner (inklusive blevel) i *_indexes docs siger " Søjlenavne efterfulgt af en stjerne udfyldes kun, hvis du indsamler statistikker over indekset ved hjælp af ANALYZE-sætningen eller DBMS_STATS-pakken. " Jeg antager, at motoren ikke ' t udfører en af disse kommandoer mod nogle eller alle systemtabeller indekser …
  • Det er lobindekser, det kan bare være en egenskab ved lobindekser. Du kan prøve at samle dem, men jeg er ikke sikker på, hvad oracle ville gøre internt.

Svar

Indeks, hvis navn start med SYS_IL.. er LOB-indekser.

BLEVEL er en egenskab for B-træindekser og gør ikke giver mening for LOB-indekser.

Selvom du indsamler statistik, forbliver BLEVEL for et sådant indeks nul.

Svar

Tak @Balazs for informationen.

Undersøgte noget omkring dette og lignede –

En lob er simpelthen en markør, og den peger på en dataklump, der gør den til lob. Så når du opretter en lob-søjle, får du automatisk et lob-indeks, så lob-data-stykker hentes hurtigere og segment, der indeholder disse data-chunks.

Brug følgende forespørgsler til at kontrollere 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 at 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 at slippe den tabel, der har lob-kolonne eller selve kolonnen.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *