-
ANALYSE TABLE bygger inte om indexet, eller hur?
Jag vet inte men nuförtiden bör du använda
DBMS_STATS.GATHER_TABLE_STATS
snarare änANALYZE TABLE
-
Direktladdning innebär att data inte infogas rad för rad utan som bulk, se Direkt sökvägsladdning
-
Om ditt index blir
UNUSABLE
då måste det vara ett globalt index. -
Använd
UPDATE GLOBAL INDEXES
sats, dvs.alter table target_table drop partition target_eldest_partition UPDATE GLOBAL INDEXES;
eller skapa lokala index. -
Beror på vilka kolumner du har indexerat. Istället för hela tabellen kan du också köra
DBMS_STATS.GATHER_INDEX_STATS
. MedDBMS_STATS.GATHER_TABLE_STATS
Du kan också specificera enstaka partitioner och till och med enstaka kolumner.
btw, för många frågor borde mitt svar faktiskt vara:"Konsulterade du Oracle-dokumentationen"? eller "Känner du google"? Enligt dina skärmdumpar använder du schemat SYS
och tabellutrymmet SYSAUX
för dina användarobjekt. Du borde inte göra det där. Skapa din egen användare och skapa valfritt objekt i detta schema.
I allmänhet finns det tre typer av partitionerade index:
- GLOBALT INDEX:Du har ett stort index som spänner över hela tabellen. Detta är obligatoriskt till exempel för UNIKA INDEX om de indexerade kolumnerna inte är en del av partitionsnyckeln. Ett sådant index är faktiskt inte uppdelat. (som visas i
ALL_INDEXES
) - LOKALT INDEX:Detta index är uppdelat på samma sätt som den underliggande tabellen är. Varje tabellpartition har en motsvarande indexpartition.
- PARTITIONERAT INDEX:Detta index är partitionerat men annorlunda än den underliggande tabellen. Jag tror att det till och med är möjligt att skapa ett partitionerat index på en icke-partitionerad tabell. Partitionerade index är begränsade till mycket speciella användningsfall. Jag kan faktiskt inte föreställa mig var ett sådant index skulle vara vettigt.