proč je blevel null pro některé indexy v Oracle DB?

Snažil jsem se zobrazit úrovně b-stromu pro indexy a ke svému překvapení vidím, že některé z nich jsou nastaveny na null.

SELECT index_name, blevel FROM user_indexes ORDER BY 2 desc; 

Jejich název začíná řetězcem „SYS _“ (obrázek níže). Takže předpokládám, že jde o indexy generované systémem? Možná primární klíče? V obou případech jsem zvědavý, proč jsou nulové. Chápu, jestli je hodnota 0, což znamená, že vše je v listových uzlech, a k získání dat bude stačit 1 skok pro jedinečné skenování.

zde zadejte popis obrázku

Komentáře

  • Vypadají jako objekty schématu sys, takže mohou hrát podle vlastních pravidel. Nejpravděpodobnější odpovědí však je, že v nich nejsou vůbec žádné uzly.
  • U několika statistických sloupců (včetně blevel) v dokumentech *_indexes je uvedeno " Názvy sloupců následované hvězdičkou se vyplní pouze v případě, že shromažďujete statistiky o indexu pomocí příkazu ANALYZE nebo balíčku DBMS_STATS. " Myslím, že motor ' neprovede některý z těchto příkazů proti některým nebo všem indexům systémových tabulek …
  • Jedná se o lobové indexy, může to být jen vlastnost lobových indexů. Můžete je zkusit shromáždit, ale nejsem si jistý, co by Oracle provedlo interně.

Odpověď

Indexy, jejichž name start with SYS_IL.. are LOB indexes.

BLEVEL is a property of B-tree indexes, and does not dávají smysl indexům LOB.

I když shromažďujete statistiky, BLEVEL pro takový index zůstane nulový.

Odpověď

Za informace děkuji @Balazs.

Prozkoumali jsme to a vypadá to takto –

Lob je jednoduše ukazatel a ukazuje na datové bloky, které tento lob vytvářejí. Když tedy vytvoříte sloupec lob, automaticky získáte index lob, aby se datové bloky lob získaly rychleji a segment, který tyto datové bloky obsahuje.

Následující dotazy použijte k ověření stejného –

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

Chcete-li zobrazit přidružené segmenty –

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

Toto můžete odstranit přetažením tabulky s lobovým sloupcem nebo samotný sloupec.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *