Wenn Sie diesen Artikel lesen, sind Sie höchstwahrscheinlich bereits mit SQL vertraut. Sie wissen, wie man einfache SQL-Abfragen schreibt. Es gibt viele Möglichkeiten, eine SQL-Abfrage auszuführen, um die gewünschten Ergebnisse in Ihrer Datenbank zu erhalten.
Allerdings sind nicht alle SQL-Abfragen gleich. Die meisten können optimiert werden, um den Best Practices für SQL-Abfragen zu folgen. Dieser Artikel konzentriert sich auf 9 Tipps zur Optimierung von SQL-Abfragen. Nach dem Lesen kennen Sie alle Vor- und Nachteile beim Schreiben von SQL-Abfragen.
1. Vermeiden Sie die Verwendung von SELECT Asterisk (SELECT *)
Dies ist eine der wichtigsten Best Practices für SQL. Die Abfrage SELECT * gibt Datensätze aus allen Spalten der Tabelle zurück. Obwohl diese Abfrage in manchen Fällen hilfreich ist, führt sie oft zu zahlreichen Komplikationen:
- Möglicherweise müssen Sie nicht alle Spalten abrufen. SELECT * gibt sie jedoch alle zurück, wodurch übermäßig viel Bandbreite für die Ausführung einer Abfrage über das Netzwerk verbraucht wird.
- Spaltennamen in einer Tabelle können geändert oder entfernt und neue Spalten hinzugefügt werden. Daher erhalten Sie möglicherweise unerwartete Ergebnisse für die Abfrage SELECT *. Die Angabe von Spaltennamen ist eine bessere Idee.
- SELECT * ist langsamer als SELECT Column Names, da letzteres Spaltenindizes verwenden kann, um Daten zurückzugeben.
- Die Reihenfolge der von SELECT * zurückgegebenen Spalten liegt nicht in Ihrer Kontrolle. Die gewünschte Reihenfolge legen Sie jedoch bei der Angabe der Spaltennamen fest.
2. Verwenden Sie die WHERE- und HAVING-Klauseln genau
Die WHERE- und HAVING-Klauseln in SQL haben unterschiedliche Funktionalitäten. Daher sollten wir sie anders verwenden. Die drei Hauptanwendungsfälle von WHERE und HAVING sind unten:
- WHERE kann mit CRUD-Abfragen verwendet werden, d. h. SELECT, INSERT, UPDATE, DELETE. Andererseits können Sie HAVING nur mit der SELECT-Anweisung verwenden.
- WHERE filtert Daten vor Aggregationsvorgängen wie GROUP BY. Dann kann es ohne Aggregationsfunktion verwendet werden. HAVING sollte nach der Aggregation verwendet werden.
- Wir können die Aggregationsfunktionen wie SUM, MIN, MAX COUNT mit der HAVING-Klausel verwenden. Mit der WHERE-Klausel können wir keine Aggregationsfunktionen verwenden, es sei denn, diese Klausel ist Teil einer Unterabfrage, die in der HAVING-Klausel enthalten ist.
3. Verwenden Sie die INNER JOIN-Abfrage anstelle der WHERE-Klausel zum Verbinden von Tabellen
Die JOIN-Abfrage ist wahrscheinlich eine der nützlichsten SQL-Abfragen. Es ermöglicht Ihnen, Daten aus mehreren Tabellen auszuwählen. Obwohl Sie die WHERE-Klausel verwenden können, um aggregierte Daten aus zwei Tabellen zu erhalten, ist die WHERE-Klausel höchst ineffizient.
Die WHERE-Klausel gibt CROSS JOIN zurück, das ein kartesisches Produkt der Datensätze in beiden Spalten ist. Wenn Sie beispielsweise 1.000 Datensätze in Tabelle A und die gleiche Anzahl von Datensätzen in Tabelle B haben, erstellt die WHERE-Klausel einen CROSS JOIN mit 1.000 x 1.000 =1.000.000 Datensätzen.
Wenn die Spalten der Tabellen A und B, die an der WHERE-Klausel beteiligt sind, nur 1.000 gemeinsame Werte haben, gibt die WHERE-Klausel 1.000 Datensätze von den anfänglichen 1.000.000 Datensätzen zurück, die durch das kartesische Produkt erstellt wurden.
Die INNER JOIN-Klausel gibt nur 1.000 Datensätze zurück, bei denen die Tabellen A und B gemeinsame Werte in den Spalten haben. In diesem Fall hat INNER JOIN 1.000-mal weniger Arbeit als die WHERE-Klausel.
Einige Datenbanken konvertieren die WHERE-Klausel in der JOIN-Abfrage hinter den Kulissen in die INNER JOIN-Klausel. Es wird jedoch immer empfohlen, INNER JOIN explizit anstelle der WHERE-Klausel zu verwenden, um den Best Practices für die SQL-Codierung zu folgen.
4. Verwenden Sie EXISTS, NOT EXISTS anstelle von IN und NOT IN in SQL
Verwenden Sie EXIST immer über der IN-Klausel, wenn Sie die Existenz eines Werts in einer bestimmten Tabelle bestätigen möchten.
Der Prozess, der die EXISTS-Klausel ausführt, stoppt, sobald er den erforderlichen Wert in der Tabelle findet. Andererseits scannt die IN-Abfrage alles, selbst nachdem der notwendige Wert gefunden wurde.
Auf die gleiche Weise sollten Sie immer NOT EXISTS statt NOT IN verwenden, wenn Sie nach dem Wert suchen, der in einer Tabelle nicht existiert.
5. Verwenden Sie den Gleichheitsoperator (=) anstelle von LIKE Operator in SQL
Sie können sowohl den =- als auch den LIKE-Operator verwenden, um Zeichenfolgen abzugleichen. Der Hauptunterschied zwischen den beiden besteht darin, dass der LIKE-Operator zum Abgleichen von Platzhaltern wie % für die Suche nach Teilzeichenfolgen verwendet wird, während der Gleichheitsoperator „=“ nach exakten Übereinstimmungen sucht.
Wenn Sie sich zwischen den beiden entscheiden müssen, bevorzugen Sie immer den Gleichheitsoperator („=“), da er indizierte Spalten verwendet. Daher ist es schneller als die LIKE-Klausel.
6. Verwenden Sie die LIMIT-Klausel, um Suchergebnisse zu reduzieren
Wenn Sie Daten aus mehreren Tabellen oder Spalten zurückgeben müssen, verwenden Sie die LIMIT-Klausel (auch bekannt als TOP-Klausel), um die Abfrageergebnisse zu reduzieren. Wenn es Tausende von Spalten gibt oder Sie nur sehen möchten, wie die Daten in Ihren Tabellen aussehen, müssen nicht alle Zeilen zurückgegeben werden. Begrenzen Sie stattdessen die Anzahl der von der SELECT-Abfrage zurückgegebenen Zeilen mit Hilfe der LIMIT-Klausel in Verbindung damit.
7. Verwenden Sie Tabellenaliase, wenn Sie mehrere Tabellen abfragen
Um Verwirrung zu vermeiden und zu verhindern, dass Datenbanken Spaltennamen analysieren, wenn sie nach der Tabelle suchen, zu der sie gehören, verwenden Sie immer Tabellenaliase.
Sie müssen bereits Tabellennamen/Aliase verwenden, wenn Sie in mehreren Tabellen dieselben Spaltennamen haben, sodass dies Ihre Arbeitslast nicht erhöht.
8. Vermeiden Sie es, gespeicherten Prozeduren das Präfix „sp_“ voranzustellen
Wenn Sie mit gespeicherten Prozeduren gearbeitet haben, haben Sie dem Namen der gespeicherten Prozedur höchstwahrscheinlich „sp_“ vorangestellt. Das ist nicht das Beste.
SQL Server beginnt mit der Suche nach gespeicherten Prozeduren mit „sp_“ am Anfang ihres Namens in der Master-Datenbank, bevor die Suche an anderer Stelle fortgesetzt wird.
Daher können Sie viel Zeit sparen, indem Sie gespeicherten Prozeduren nicht das Präfix „sp_“ voranstellen. Anstatt zu versuchen, die gespeicherte Prozedur in der Master-Datenbank zu finden, überprüft der SQL-Server dann direkt dbo als Eigentümer der gespeicherten Prozedur.
9. Übernehmen Sie einen guten Schreibstil für Abfragen
Es ist wichtig, Best Practices für SQL-Abfragen zu befolgen, wie z. B. gute Styling-Praktiken beim Schreiben von SQL-Abfragen. Beachten Sie die folgenden Empfehlungen zur Verbesserung Ihres Schreibstils für Abfragen:
- Fügen Sie immer Kommentare zu SQL-Abfragen hinzu. Kommentare helfen nicht nur anderen Teammitgliedern, Ihre Fragen besser zu verstehen, sondern erinnern Sie auch daran, was Sie selbst in der Vergangenheit getan haben.
- Verwenden Sie offensichtliche Namenskonventionen. Die Datenbank, Tabellen, Spaltennamen, temporäre Tabellen und andere Variablennamen sollten zu 100 % lesbar und klar sein.
- Rücken Sie Ihre Abfragen nach Möglichkeit ein. Innere Abfragen müssen um einen Tabulator von links eingerückt werden. Spaltennamen und -typen innerhalb einer Tabelle sollten ebenfalls eingerückt werden. Die Einrückung sorgt für ein übersichtlicheres Erscheinungsbild und verbessert die Lesbarkeit von Abfragen, was sich in den Best Practices für Abfragen von SQL Server widerspiegelt.
Schlussfolgerung
SQL ist eine sehr flexible Sprache, die zahlreiche Möglichkeiten bietet, gewünschte Aufgaben in einer Datenbank auszuführen. Um Ihre Anwendungen effizienter und produktiver zu machen und langfristige Datenbankprobleme zu vermeiden, wenden Sie moderne Best Practices für die SQL-Abfrageoptimierung an, um Ihre Abfragen zu schreiben. Diese Methoden helfen Ihnen, die Leistungsoptimierung in SQL zu beschleunigen, unnötige Routinen zu eliminieren und Ihre gesamte Arbeit übersichtlicher und transparenter zu gestalten.
Lesen Sie auch
22 raffinierte Beispiele für SQL-Indizes, um Ihre Abfragen zu beschleunigen