Próbowałem zobaczyć poziomy b-drzewa dla indeksów i ku mojemu zdziwieniu widzę, że niektóre z nich są ustawione na zero.
SELECT index_name, blevel FROM user_indexes ORDER BY 2 desc;
Ich nazwa zaczyna się od „SYS _” (zdjęcie załączone poniżej). Więc zakładam, że są to indeksy generowane przez system? Może kluczy głównych? Tak czy inaczej, jestem ciekawy, dlaczego są one nieważne. Rozumiem, jeśli wartość wynosi 0, co oznacza, że wszystko znajduje się w węzłach liści, a unikalne skanowanie w celu uzyskania danych zajmie tylko 1 skok.
Komentarze
Odpowiedź
Indeksy, których nazwa zaczyna się od SYS_IL..
to indeksy LOB.
BLEVEL
jest właściwością indeksów B-drzew i nie ma sens dla indeksów LOB.
Nawet jeśli zbierasz statystyki, BLEVEL
dla takiego indeksu pozostanie zerowe.
Odpowiedź
Dzięki @Balazs za informacje.
Zbadałem to i wygląda następująco –
Lob jest po prostu wskaźnikiem i wskazuje na fragmenty danych, które tworzą ten lob. Więc kiedy tworzysz kolumnę lob, automatycznie uzyskujesz indeks lob, dzięki czemu fragmenty danych lob są pobierane szybciej i segment, który przechowuje te fragmenty danych.
Użyj następujących zapytań, aby to sprawdzić –
SELECT index_name,INDEX_TYPE, blevel FROM user_indexes where blevel is null and index_name like "SYS_IL%%" ORDER BY 3 desc;
Aby zobaczyć powiązane 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%%" );
Możesz to usunąć, upuszczając tabelę, która ma kolumnę lob lub samą kolumnę.
*_indexes
dokumentach jest napisane " Nazwy kolumn zakończone gwiazdką są zapełniane tylko wtedy, gdy zbierasz statystyki indeksu za pomocą instrukcji ANALIZA lub pakietu DBMS_STATS. " Wydaje mi się, że silnik nie ' nie wykonuje żadnego z tych poleceń względem niektórych lub wszystkich indeksów tabel systemowych …