Zum Inhalt springen
_CORE
KI & Agentensysteme Unternehmensinformationssysteme Cloud & Platform Engineering Datenplattform & Integration Sicherheit & Compliance QA, Testing & Observability IoT, Automatisierung & Robotik Mobile & Digitale Produkte Banken & Finanzen Versicherungen Öffentliche Verwaltung Verteidigung & Sicherheit Gesundheitswesen Energie & Versorgung Telko & Medien Industrie & Fertigung Logistik & E-Commerce Retail & Treueprogramme
Referenzen Technologien Blog Know-how Tools
Über uns Zusammenarbeit Karriere
CS EN DE
Lassen Sie uns sprechen

Oracle DB — wenn ein einzelner Index alles verändert

15. 03. 2011 Aktualisiert: 24. 03. 2026 1 Min. Lesezeit CORE SYSTEMSdata
Dieser Artikel wurde veröffentlicht im Jahr 2011. Einige Informationen können veraltet sein.
Oracle DB — wenn ein einzelner Index alles verändert

Letzten Monat kontaktierte uns ein Kunde mit einem Problem, das jeder DBA kennt: Die Anwendung ist langsam. Konkret — die Suche nach Bestellungen in ihrem ERP-System dauerte 45 Sekunden. Vor einem Jahr waren es 2 Sekunden. Datenbank: Oracle 11g R2, Bestellungstabelle: 12 Millionen Zeilen.

Diagnose: EXPLAIN PLAN

Erster Instinkt: Wir brauchen mehr RAM oder schnellere Festplatten. Aber bevor man Hardware auf ein Problem wirft, sollte man sich den Execution Plan ansehen. In 90 % der Fälle liegt das Problem im SQL oder fehlenden Indizes. Oracle führte einen FULL TABLE SCAN auf der ORDERS-Tabelle durch, gefolgt von einem NESTED LOOPS Join mit der CUSTOMERS-Tabelle. Kein Index auf der ORDER_DATE-Spalte, nach der gesucht wurde.

Lösung

Ein Composite Index auf den Spalten aus der WHERE-Klausel. Nach Erstellung des Index und Aktualisierung der Statistiken änderte sich der Execution Plan dramatisch. Die Kosten fielen von 47.832 auf 234. Die Abfragezeit von 45 Sekunden auf 0,3 Sekunden.

Histogramme — der verborgene Held

Die STATUS-Spalte hatte eine stark ungleichmäßige Werteverteilung — 95 % der Zeilen waren ACTIVE. Ohne Histogramm schätzte Oracle eine 50/50-Verteilung, was zu fehlerhaften Execution Plans führte. Lösung: DBMS_STATS.GATHER_TABLE_STATS mit einem Histogramm auf der STATUS-Spalte.

Partitioning

Für die Tabelle mit 12 Millionen Zeilen empfahlen wir Range Partitioning nach ORDER_DATE. Monatliche Partitionen = Partition Pruning = weitere Beschleunigung. Bonus: Die Archivierung alter Daten wird trivial.

AWR-Monitoring

Wir richteten wöchentliche AWR-Reports mit einem automatischen Alert ein, wenn ein Top-SQL-Statement seinen Execution Plan ändert. Prävention ist besser als Feuerwehr spielen.

Regeln für SQL-Optimierung

  1. Immer EXPLAIN PLAN — nicht raten, messen. 2. Composite Indizes. 3. Statistiken regelmäßig aktualisieren. 4. Histogramme für ungleichmäßig verteilte Spalten. 5. Partitioning für große Tabellen.
oraclesqlperformanceindexy
Teilen:

CORE SYSTEMS

Wir bauen Kernsysteme und KI-Agenten, die den Betrieb am Laufen halten. 15 Jahre Erfahrung mit Enterprise-IT.

Brauchen Sie Hilfe bei der Implementierung?

Unsere Experten helfen Ihnen bei Design, Implementierung und Betrieb. Von der Architektur bis zur Produktion.

Kontaktieren Sie uns
Brauchen Sie Hilfe bei der Implementierung? Termin vereinbaren