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