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