Ein Index kann Platz belegen und jede Änderung an der Tabelle verteuern, obwohl kaum eine Abfrage ihn noch benötigt. Direktes Löschen ist riskant: Eine selten ausgeführte, aber geschäftskritische Abfrage könnte danach plötzlich einen Full Table Scan verwenden. Oracle Invisible Indexes bieten einen Zwischenschritt: Der Index bleibt vorhanden und wird durch DML weiter gepflegt, aber der Optimizer ignoriert ihn standardmäßig.
Bestehenden Index auf Wirkung testen
Vor einer möglichen Bereinigung lässt sich ein Index kontrolliert unsichtbar schalten:
ALTER INDEX orders_customer_ix INVISIBLE;
SELECT index_name, visibility, status
FROM user_indexes
WHERE index_name = 'ORDERS_CUSTOMER_IX';
Danach laufen normale Sessions ohne diesen Index im Optimizer-Angebot weiter. Beobachten Sie nicht nur einen einzelnen Explain Plan, sondern repräsentative SQLs, tatsächliche Laufzeiten, I/O und Batch-Zeiten über einen passenden Geschäftszyklus. Werden unerwartete Regressionen sichtbar, kann der Index schnell wieder eingeblendet werden:
ALTER INDEX orders_customer_ix VISIBLE;
Unsichtbar bedeutet dabei nicht „kostenlos deaktiviert“: DML hält den Index weiterhin aktuell und der Index belegt weiterhin Speicher. Der Test entfernt also zunächst nur die Verfügbarkeit für die automatische Planwahl – nicht die Schreib- oder Speicherlast des Index.
Neue Indizes isoliert ausprobieren
Der umgekehrte Einsatz ist ebenfalls praktisch: Einen Kandidaten unsichtbar anlegen und nur in einer kontrollierten Testsitzung für den Optimizer freigeben:
CREATE INDEX orders_created_ix
ON orders (created_at) INVISIBLE;
ALTER SESSION SET optimizer_use_invisible_indexes = TRUE;
EXPLAIN PLAN FOR
SELECT order_id
FROM orders
WHERE created_at >= TIMESTAMP '2026-10-01 00:00:00';
SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY());
Die Einstellung gilt für diese Session und behandelt unsichtbare Indizes dort wie sichtbare. Vergleichen Sie Pläne und Laufzeit mit identischen Bind-Werten, Datenständen und Statistiken. Ein anderer Plan ist noch kein Beweis für einen Gewinn: Selektivität, DML-Kosten und reale Last gehören in die Bewertung.
Grenzen und sauberer Rollout
Prüfen Sie vorab, ob Anwendungen oder administrative Sessions OPTIMIZER_USE_INVISIBLE_INDEXES systemweit aktivieren; dann könnten sie den Testindex ebenfalls verwenden. Sichtbarkeit lässt sich in USER_INDEXES oder DBA_INDEXES kontrollieren. Beachten Sie zudem Integritätsbedingungen und die Sonderrolle von Indizes, die Constraints unterstützen, bevor Sie einen Index als Löschkandidaten behandeln.
Dokumentieren Sie Eigentümer, Zweck, Testzeitraum und Entscheidung. Erst nach beobachteter Regressionfreiheit wird ein alter Index tatsächlich gelöscht; bei einem neuen Index wird Sichtbarkeit gezielt freigegeben. So wird die unsichtbare Phase zu einem überprüfbaren Betriebsprozess statt zu einem dauerhaften Ablageort für vergessene Indizes.
Fazit
Invisible Indexes machen Veränderungen am Optimizer-Angebot reversibel und erlauben sowohl den Test einer Index-Neuanlage als auch das gefahrärmere Prüfen einer Entfernung. Da der Index währenddessen weiterhin gepflegt wird, ist die Technik ein Plan-Test – kein Ersatz für eine abschließende Last- und DML-Bewertung.
Weiterführend: Oracles Hinweise zu unsichtbaren Indizes verwalten und zum Parameter OPTIMIZER_USE_INVISIBLE_INDEXES.