Indizes auf Tabellen, in denen häufig gelöscht wird, regelmäßig reorganisieren:
alter index <index> rebuild (möglichst, wenn keine Anwender arbeiten; auf ausreichend TEMP-Platz achten)
Durch geeignete Storage Parameter die Anzahl der Extents nicht zu groß werden lassen
(maximal einige Hundert)
SQL-Tuning
Verwenden des kostenbasierten Optimierers mit aktuellen Analysedaten für alle Tabellen
(Befehl "analyze table"). Achtung: Seien Sie vorsichtig mit der Umstellung. es können auch einzelne
gravierende Verlangsamungen auftreten!
Erstellen von Histogrammen (Befehl "analyze table" mit Klausel "for all indexed
columns")
bei Verwendung von RULE: driving table berücksichtigen (letzte Tabelle in der from-Klausel)
bei Verwendung von "or" ggf. RULE einschalten oder "UNION" verwenden
an häufig benutzten kleinen Tabellen den Parameter "cache" setzen => wird
bei full table scans nicht aus cache entfernt (alter table <tabelle> cache;>
auf "vergessene" Indizes achten (insbesondere bei "einfachen" Queries)
wenig selektive Indizes vermeiden
bei zusammengesetzten Indizes: erste Spalte muß eingeschränkt sein
bei Performance Messungen caching-Effekt berücksichtigen! Bei der ersten Ausführung
eines Befehls werden evtl. Daten über IO geladen. Ab dem zweiten Ausführen des selben Befehls befinden
sich diese evtl. schon im Hauptspeicher).
keine Verwendung von Indizes bei:
is not null
<>
like '%abc...'
Funktionen auf Spalten: z.B. upper(name)='MEIER'
=> ab Oracle 8i Indizes auf Funktionen möglich (in Oracle 8i nur in der Enterprise Edition, ab Oracle 9i
auch in der Standard Edition verfügbar)
besser "exists"-Subquery als "in"-Subquery verwenden
Stichwörter
Datenbank database Performance Tipps Blockgröße Checkpoints Indizes Index exists in NULL driving table Befehl Befehle alter table cache nocache