waarom is blevel null voor sommige indexen in Oracle DB?

Ik probeerde de b-tree-niveaus voor indexen te zien en tot mijn verbazing zie ik dat sommige op null zijn ingesteld.

SELECT index_name, blevel FROM user_indexes ORDER BY 2 desc; 

Hun naam begint met “SYS _” (afbeelding hieronder bijgevoegd). Dus ik neem aan dat het door het systeem gegenereerde indexen zijn? Misschien van primaire sleutels? Hoe dan ook, ik ben benieuwd waarom ze nul zijn. Ik kan begrijpen of de waarde 0 is, wat betekent dat alles zich in bladknooppunten bevindt en er slechts 1 hop nodig is voor een unieke scan om de gegevens op te halen.

voer de beschrijving van de afbeelding hier in

Opmerkingen

  • Ze zien eruit als sys-schema-objecten, dus ze spelen misschien volgens hun eigen regels. Maar het meest waarschijnlijke antwoord is dat er helemaal geen knooppunten in zitten.
  • Voor nogal wat statistiekenkolommen (inclusief blevel) in *_indexes zegt docs " Kolomnamen gevolgd door een asterisk worden alleen ingevuld als u statistieken over de index verzamelt met behulp van de ANALYZE-instructie of het DBMS_STATS-pakket. " Ik denk dat de engine ' geen van deze opdrachten uitvoert tegen sommige of alle systeemtabellenindexen …
  • Dat zijn lob-indexen, het kan gewoon een eigenschap zijn van lob-indexen. Je kunt proberen ze te verzamelen, maar ik weet niet zeker wat het orakel intern zou doen.

Antwoord

Indexen waarvan de naam begint met SYS_IL.. zijn LOB-indexen.

BLEVEL is een eigenschap van B-tree-indexen, en niet zinvol voor LOB-indexen.

Zelfs als u statistieken verzamelt, BLEVEL voor zon index blijft null.

Antwoord

Bedankt @Balazs voor de info.

Heeft hier wat onderzoek naar gedaan en ziet eruit als –

Een lob is gewoon een pointer en het verwijst naar een gegevensblok dat die lob maakt. Dus wanneer u een lob-kolom maakt, krijgt u automatisch een lob-index zodat lob-gegevensblokken sneller worden opgehaald en segmenten die deze gegevensblokken bevatten.

Gebruik de volgende queries om hetzelfde te verifiëren –

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

Om geassocieerde segmenten te zien –

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

U kunt dit verwijderen door de tabel met de lob-kolom of de kolom zelf.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *