SQL-Optimierung
in wenigen Schritten
Viele Performance-Probleme lassen sich bereits mit kleinen Anpassungen beheben. Die folgenden Tipps zeigen, wie sich Abfragen gezielt optimieren lassen, um das volle Leistungspotenzial auszuschöpfen.
7 Tipps für schnellere Abfragen in verteilten Datenbanken
Ineffiziente Queries als echter Performance-Killer
Viele Performance-Probleme sind nicht auf langsame Hardware, sondern auf ineffiziente SQL-Abfragen zurückzuführen. Meistens fallen diese aber bei kleinen Datenmengen nicht auf. Mit der Zeit vervielfachen sich Daten und Abfragezeiten. Die bestmögliche Lösung kann man nur im jeweiligen Fall ermitteln. Dennoch kann die Beachtung folgender Tipps die SQL-Performance bereits maßgeblich verbessern.
Grundlegende Optimierungen
1. zu wenig Filter-Kriterien:
Häufig wird nur ein bestimmter Datenbereich der gejointen Tabellen benötigt. Durch die Begrenzung auf bestimmte Ausprägungen müssen weniger Daten verarbeitet werden.
Beispielsweise können historisierte Tabellen in der Regel auf die letzten fachlich gültigen Daten begrenzt werden (im Bild die Zeilen mit guelt_stat = L). So können viele Zeilen gespart werden, da sich über Jahrzehnte eine große Datenmenge anhäuft.
2. unzureichende Join-Bedingung:
Wenn mehrere Zeilen auf beiden Seiten matchen (Viele-zu-viele-Beziehung), entsteht ein kartesisches Produkt (Cross Join) der beiden Tabellen. Cross Joins sind selten beabsichtigt - oder notwendig - und sollte unbedingt vermieden werden. Bereits mittlere Datenmengen erzeugen eine erhebliche Last und Abfragezeit. In diesem Fall sollten eindeutige Felder für den Join verwendet werden. Diese sollten für die beste Performance zusätzlich dieselben Datentypen haben.
3. schlechtes Datenmodell:
Optimierte SQLs bringen keinen signifikanten Vorteil, wenn das Datenmodell nicht hinreichend durchdacht oder zukunftsfähig ist. Zu viel aber auch zu wenig Normalisierung kann zu Performance-Problemen führen. Datentypen sollten von vornherein sinnvoll gewählt werden. Oftmals sind diese Datenmodelle durch die Quellsysteme bedingt und nicht änderbar. Dann sollten die Daten in kleineren Schritten an ein performantes Datenmodell angepasst werden. Meistens befinden sich Data-Engineers im Unternehmen, die diese Optimierung unterstützen können.
Spezifische Optimierung für verteilte Datenbanken am Beispiel von Greenplum
1. Tabellen-Analyze durchführen:
Für den Optimizer ist die Kenntnis über die Datenstrukturen und -Statistiken essenziell. Dabei werden z.B. die häufigsten Spaltenwerte und eine geschätzte Datenverteilung ermittelt. Diese Informationen helfen dem Query Planner den effizientesten Execution Plan für Abfragen zu ermitteln. In bestimmten Fällen sollte allerdings kein explizites Analyze erfolgen (z.B. zwischen direkt aufeinanderfolgenden Inserts, Updates oder Deletes).
2. Sub-Selects vermeiden:
Die Ergebnismenge des Sub-Selects wird per Datenbank-Broadcast auf alle Segment-Server verteilt. Je nach Größe kann das signifikante Performance-Nachteile bedeuten. Stattdessen sollten Sub-Selects in vorherige Temp-Tabellen ausgelagert und anschließen im eigentlichen Select gejoint werden.
3. Verteilung (Distribution) optimieren:
Durch den Verteilschlüssel werden die Daten auf alle Segment-Server der Greenplum-DB verteilt. Dieser Schlüssel wird am Ende von Tabellendefinitionen hinterlegt mit distributed by <Spalte>. Die Ausprägungen der Spalte sollten ein Vielfaches der Anzahl der Segment-Server sein, da es sonst zu ungleicher Verteilung und höheren Abfragezeiten kommt. Dabei können einzelne Ausprägungen die gleichmäßige Verteilung stören, beispielsweise wenn eine große Anzahl NULLs existiert.
Quelle: https://techdocs.broadcom.com/us/en/vmware-tanzu/data-solutions/tanzu-greenplum/7/greenplum-database/admin_guide-intro-arch_overview.html am 08.10.2025
4. durchdachtes Indexing:
In klassischen Datenbanken können Indexe den Datenzugriff maßgeblich beschleunigen. In einer auf viele Segmente verteilten Datenbank wie Greenplum sollte das allerdings in Maßen genutzt werden.
Greenplum kann sehr schnelle sequentielle Scans durchführen, weshalb die Performance bei großen Datenmengen für BI-Lösungen ohne Indexing oftmals besser ist. Auch bei vielen regelmäßigen Schreiboperationen erzeugt Indexing einen größeren Aufwand durch die Pflege des Indexes.
Dennoch gibt es Fälle in denen auch Indexing die Abfragezeit in GreenplumDBs verbessert.
Quelle: https://www.atlassian.com/data/databases/how-does-indexing-work am 08.10.2025
Fazit
Es gibt viele Wege, um die Query-Performance zu boosten. Für die Einzelfallbehandlung müssen allerdings immer die Gegebenheiten der Datenbank und des Datenmodells beachtet werden. Bei unterschiedlichen Einstellungen können vermeintliche Optimierungen ineffizienter sein. Daher ist es essenziell mit dem Datenbank-Admin und Data Engineers in Kontakt zu treten und die optimale Herangehensweise für Ihr Unternehmen / Ihren Bereich / Ihre Anwendung herauszufinden.
Haben Sie Fragen? Sprechen Sie uns an!
Marcel Dittmann
IT Consultant