-
ANALYZE TABLE nie odbudowuje indeksu, prawda?
Nie wiem, ale w dzisiejszych czasach powinieneś używać
DBMS_STATS.GATHER_TABLE_STATS
zamiastANALYZE TABLE
-
Ładowanie bezpośrednie oznacza, że dane nie są wstawiane wiersz po wierszu, ale zbiorczo, patrz Bezpośrednie ładowanie ścieżki
-
Jeśli Twój indeks stanie się
UNUSABLE
to musi to być indeks globalny. -
Użyj
UPDATE GLOBAL INDEXES
klauzula, tj.alter table target_table drop partition target_eldest_partition UPDATE GLOBAL INDEXES;
lub utwórz indeksy lokalne. -
Zależy od indeksowanych kolumn. Zamiast całej tabeli możesz również uruchomić
DBMS_STATS.GATHER_INDEX_STATS
. ZDBMS_STATS.GATHER_TABLE_STATS
możesz również określić tylko pojedyncze partycje, a nawet pojedyncze kolumny.
btw, na wiele pytań moja odpowiedź powinna brzmieć:„Czy zapoznałeś się z dokumentacją Oracle”? lub „Znasz google”? Zgodnie z twoimi zrzutami ekranu używasz schematu SYS
i przestrzeń tabel SYSAUX
dla obiektów użytkownika. Nie powinieneś tego robić. Utwórz własnego użytkownika i utwórz dowolny obiekt w tym schemacie.
Ogólnie istnieją trzy typy indeksów partycjonowanych:
- INDEKS GLOBALNY:Masz jeden duży indeks obejmujący całą tabelę. Jest to obowiązkowe na przykład dla UNIQUE INDEXES, jeśli indeksowane kolumny nie są częścią klucza partycji. W rzeczywistości taki indeks nie jest podzielony na partycje. (jak pokazano w
ALL_INDEXES
) - INDEKS LOKALNY:Ten indeks jest podzielony na partycje w taki sam sposób, jak tabela bazowa. Każda partycja tabeli ma odpowiednią partycję indeksu.
- INDEKS PODZIELONY:Ten indeks jest podzielony na partycje, ale inny niż tabela bazowa. Myślę, że możliwe jest nawet utworzenie indeksu partycjonowanego w tabeli niepartycjonowanej. Indeksy partycjonowane są ograniczone tylko do bardzo specjalnych przypadków użycia. Właściwie nie wyobrażam sobie, gdzie taki indeks miałby sens.