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í.
Komentáře
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.
*_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 …