Der erste Index macht den größten Unterschied.
Zur Optimierung einer insert
-Anweisung ist es also wichtig, die Anzahl der Indizes klein zu halten.
Setze Indizes gezielt, aber sparsam ein und vermeide redundante Indizierung. Davon profitieren auch delete
- und update
-Anweisungen.
Wenn man nur insert
-Anweisungen betrachtet, wäre es ideal, gar keinen Index anzulegen. Damit erhält man die mit Abstand beste insert
-Performance. In realen Anwendungen sind Tabellen ohne Index jedoch ausgesprochen unrealistisch. In der Regel möchte man die gespeicherten Daten später auch wieder auslesen, sodass eine Indizierung für die select
-Abfragen wünschenswert ist. Selbst die einfachsten Tabellen brauchen zumindest einen Index für den Primärschlüssel.
Da der Performancegewinn ohne Index dermaßen eklatant ist, kann es sich zum Laden großer Datenmengen auszahlen, alle Indizes während des Ladens zu löschen – vorausgesetzt, die Indizes werden in dieser Zeit nicht für andere SQL-Anweisungen benötigt. Dadurch kann man den sprunghaften Performancegewinn, der im Chart sichtbar ist, realisieren. Diese Vorgehensweise ist im Datawarehouse-Bereich durchaus üblich.
Wie würde sich Abbildung 8.1 ändern, wenn man eine Index-organisierte Tabelle oder einen Clustered-Index verwendet?
Gibt es vielleicht einen indirekten Weg, auf dem eine insert
-Anweisung von Indizierung profitieren kann – das Einfügen durch einen zusätzlichen Index also schneller wird?
Du kannst nicht alles an einem Tag lernen. Abonniere den Newsletter via E-Mail, Bluesky oder RSS um sukzessive aufzuholen. Und sieh dir auch modern-sql.com an.
Markus verwandelt veraltetes SQL-92-Wissen in solides und zeitgemäßes SQL-Know-how