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