Bild vom Autor
Für alle Datenrollen sind gute Datenbank- und SQL-Kenntnisse erforderlich. In der Praxis werden Sie an einem typischen Arbeitstag sehr große Datenbanktabellen abfragen – mit mehreren Tausend oder sogar Millionen Zeilen. Deshalb wird die Leistung von SQL-Abfragen zu einem wichtigen Faktor bei der Entscheidung über die Gesamtleistung der Anwendung.
Schlecht optimierte Abfragen können häufig zu langsameren Antwortzeiten, erhöhter Serverlast und einer suboptimalen Benutzererfahrung führen. Daher ist es wichtig, SQL-Abfrageoptimierungstechniken zu verstehen und anzuwenden.
In diesem Tutorial erhalten Sie praktische Tipps zur Optimierung von SQL-Abfragen. Legen wir los.
Bevor Sie beginnen: Holen Sie sich eine Beispieldatenbanktabelle
Sie können die folgenden Tipps beim Schreiben von SQL-Abfragen für jede beliebige Datenbank verwenden, mit der Sie arbeiten. Wenn Sie jedoch eine Beispieldatenbanktabelle zum Ausführen dieser Abfragen verwenden möchten, können Sie Folgendes verwenden: dieses Python-Skript.
Es stellt eine Verbindung zu einer SQLite-Datenbank her: Mitarbeiter.dberzeugt eine Mitarbeiter Tabelle und füllt sie mit 10000 Datensätzen. Wie erwähnt, können Sie jederzeit Ihr eigenes Beispiel erstellen.
1. Verwenden Sie nicht SELECT *; wählen Sie stattdessen bestimmte Spalten aus
Es ist durchaus üblich, dass Anfänger WÄHLEN * um alle Spalten aus der Tabelle abzurufen. Dies kann ineffizient sein, wenn Sie nur wenige Spalten benötigen – was quick immer der Fall ist.
Verwenden von WÄHLEN * kann daher zu einer übermäßigen Datenverarbeitung führen, insbesondere wenn die Tabelle viele Spalten hat oder wenn Sie mit einem großen Datensatz arbeiten.
An Stelle von:
Mach das:
SELECT employee_id, first_name, last_name FROM workers;
Durch das Lesen nur der erforderlichen Spalten können die Abfragen lesbarer und wartbarer gemacht werden.
2. Vermeiden Sie die Verwendung von SELECT DISTINCT; verwenden Sie stattdessen GROUP BY
AUSWÄHLEN kann kostspielig sein, da die Ergebnisse sortiert und gefiltert werden müssen, um Duplikate zu entfernen. Es ist besser, sicherzustellen, dass die abgefragten Daten von vornherein eindeutig sind – durch die Verwendung von Primärschlüsseln oder eindeutigen Einschränkungen.
An Stelle von:
SELECT DISTINCT division FROM workers;
Die folgende Abfrage mit der GROUP BY-Klausel ist wesentlich hilfreicher:
SELECT division FROM workers GROUP BY division;
GROUP BY kann effizienter sein, insbesondere bei richtiger Indizierung (über Indizes sprechen wir später). Stellen Sie daher beim Schreiben von Abfragen sicher, dass Sie Ihre Daten – die verschiedenen Felder – auf Datenmodellebene verstehen.
3. Begrenzen Sie die Abfrageergebnisse
Häufig werden Sie große Tabellen mit Tausenden von Zeilen abfragen, aber Sie müssen (und können) nicht immer alle Zeilen verarbeiten. Mit dem GRENZE -Klausel (oder das Äquivalent dazu) trägt dazu bei, die Anzahl der zurückgegebenen Zeilen zu reduzieren, was die Abfrageleistung beschleunigen kann.
Sie können die Ergebnisse auf 15 Datensätze beschränken:
SELECT employee_id, first_name, last_name FROM workers LIMIT 15;
Durch die Verwendung einer LIMIT-Klausel wird die Größe des Ergebnissatzes verringert, wodurch die zu verarbeitende und zu übertragende Datenmenge verringert wird. Dies ist auch für die Paginierung von Ergebnissen in Anwendungen nützlich.
4. Verwenden Sie Indizes für schnelleren Abruf
Indizes können die Abfrageleistung erheblich verbessern, indem sie der Datenbank ermöglichen, Zeilen schneller zu finden, als wenn sie die gesamte Tabelle durchsuchen. Sie sind besonders nützlich für Spalten, die häufig in WHERE-, JOIN- und ORDER BY-Klauseln verwendet werden.
Hier ist ein Beispiel für einen Index, der für die Spalte „Abteilung“ erstellt wurde:
CREATE INDEX idx_employee_department ON workers(division);
Sie können jetzt Abfragen ausführen, die eine Filterung nach der Spalte „Abteilung“ beinhalten, und die Ausführungszeiten vergleichen. Sie sollten sehen, dass die Ergebnisse mit dem Index viel schneller sind. Weitere Informationen zum Erstellen von Indizes und zu Leistungsverbesserungen finden Sie unter So beschleunigen Sie SQL-Abfragen mithilfe von Indizes (Python Version).
Wie bereits erwähnt, verbessert die Indizierung die Effizienz von Abfragen, die nach indizierten Spalten filtern. Aber zu viele Indizes zu erstellen, kann des Guten zu viel sein. Was uns zum nächsten Tipp führt!
5. Verwenden Sie Indizes mit Vorsicht
Während Indizes die Leseleistung verbessern, können sie die Schreibleistung (INSERT-, UPDATE- und DELETE-Abfragen) beeinträchtigen, da der Index bei jeder Änderung der Tabelle aktualisiert werden muss. Es ist wichtig, die Anzahl und Artwork der Indizes basierend auf der Artwork der Abfragen, die Sie häufig ausführen, auszugleichen.
Als Grundregeln gelten:
- Indizieren Sie nur Spalten, die häufig abgefragt werden.
- Vermeiden Sie eine übermäßige Indizierung von Spalten mit niedriger Kardinalität (wenige eindeutige Werte).
- Überprüfen Sie regelmäßig die Indizes und aktualisieren und entfernen Sie sie nach Bedarf.
Zusammenfassend lässt sich sagen, dass Sie Indizes erstellen sollten, um das Abrufen von Spalten zu beschleunigen, die häufig abgefragt, aber selten aktualisiert werden. Dadurch wird sichergestellt, dass die Vorteile von Indizes die Wartungskosten überwiegen.
Einpacken
Um SQL-Abfragen zu optimieren, müssen Sie die spezifischen Anforderungen Ihrer Abfragen und die Struktur Ihrer Daten verstehen.
Indem Sie SELECT * vermeiden, SELECT DISTINCT vorsichtig verwenden, Abfrageergebnisse begrenzen, geeignete Indizes erstellen und sich der Kompromisse bei der Indizierung bewusst sind, können Sie die Leistung und Effizienz Ihrer Datenbankvorgänge erheblich verbessern.
Viel Spaß beim Abfragen!
Bala Priya C ist Entwicklerin und technische Redakteurin aus Indien. Sie arbeitet gerne an der Schnittstelle zwischen Mathematik, Programmierung, Datenwissenschaft und Inhaltserstellung. Ihre Interessens- und Fachgebiete umfassen DevOps, Datenwissenschaft und natürliche Sprachverarbeitung. Sie liest, schreibt, programmiert und trinkt gerne Kaffee! Derzeit arbeitet sie daran, ihr Wissen zu lernen und mit der Entwickler-Neighborhood zu teilen, indem sie Tutorials, Anleitungen, Meinungsbeiträge und mehr verfasst. Bala erstellt auch ansprechende Ressourcenübersichten und Programmier-Tutorials.