de ce este blevel nul pentru unii indici din Oracle DB?

Încercam să văd nivelurile arborelui b pentru indici și spre surprinderea mea văd că unele dintre ele sunt setate la nul.

SELECT index_name, blevel FROM user_indexes ORDER BY 2 desc; 

Numele lor începe cu „SYS _” (poza atașată mai jos). Așadar, presupun că sunt indici generați de sistem? Poate din cheile primare? Oricum ar fi, sunt curios de ce sunt nule. Înțeleg dacă valoarea este 0, ceea ce înseamnă că totul se află în nodurile frunze și va dura doar 1 salt pentru scanare unică pentru a obține datele.

introduceți descrierea imaginii aici

Comentarii

  • Arată ca obiecte de schemă sys, astfel încât să ar putea juca după propriile reguli. Dar răspunsul cel mai probabil este că nu există deloc noduri în ele.
  • Pentru destul de multe coloane statistice (inclusiv pământ) în *_indexes docs spune " Numele coloanelor urmate de un asterisc sunt completate numai dacă colectați statistici pe index folosind instrucțiunea ANALYZE sau pachetul DBMS_STATS. " Cred că motorul nu ' nu execută nici una dintre aceste comenzi împotriva unora sau a tuturor indexurilor tabelelor de sistem …
  • Aceștia sunt indici lob, poate fi doar o proprietate a indexurilor lob. Puteți încerca să le colectați, dar nu sunt sigur ce ar face oracolul pe plan intern.

Răspuns

Indice ale căror numele începe cu SYS_IL.. sunt indici LOB.

BLEVEL este o proprietate a indexurilor arborelui B și nu are sens pentru indexurile LOB.

Chiar dacă colectați statistici, BLEVEL pentru un astfel de index va rămâne nul.

Răspunde

Mulțumesc @Balazs pentru informații.

Am făcut unele cercetări în legătură cu acest aspect și arată ca –

Un lob este pur și simplu un indicator și indică un fragment de date care îl face pe lob. Deci, atunci când creați o coloană lob, obțineți automat un index lob, astfel încât bucățile de date lob să fie recuperate mai repede și segmentul care conține aceste bucăți de date.

Utilizați următoarele interogări pentru a verifica același lucru –

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

Pentru a vedea segmentele asociate –

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

Puteți șterge acest lucru prin renunțarea la tabelul care are coloana lob sau coloana în sine.

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *