SQL-Leistungsoptimierung
Die SQL-Leistungsoptimierung ist ein Prozess zur Optimierung von SQL-Abfragen, um sicherzustellen, dass sie so schnell wie möglich ausgeführt werden. Es gibt viele Faktoren, die sich auf die Leistung von SQL-Abfragen auswirken, z. B. die Anzahl der abgefragten Tabellen, die Größe und Anzahl der Spalten in Tabellen und Indizes für Tabellen.
SQL ist eine kritische Komponente vieler Datenbanksysteme und eine bekannte Sprache zum Abfragen, Aktualisieren und Verwalten von Daten.
Die Optimierung der SQL-Leistung ist ein wichtiges Thema, das es zu meistern gilt, da es bei der Skalierbarkeit und Geschwindigkeit von Abfragen helfen kann.
In diesem Abschnitt werden wir verschiedene Möglichkeiten der SQL-Optimierung behandeln.
Wir alle wollen immer eine schnelle Antwort auf den Datenabrufprozess. Wir müssen also eine gute Datenbank entwerfen, die während der Datenmanipulation die beste Leistung bietet, was zur besten Leistung einer Anwendung führt.
Es gibt jedoch keinen direkten Weg, um die beste Leistung zu definieren, aber wir können mehrere Möglichkeiten zur Verbesserung der SQL-Abfrageleistung wählen, die in verschiedene Kategorien fallen, wie z. B. die Erstellung von Indizes, die Verwendung von Joins und das Umschreiben einer Unterabfrage zur Verwendung von JOIN usw.
Als Entwickler wissen wir, dass jede SQL-Abfrage auf verschiedene Arten geschrieben werden kann, aber wir sollten Best Practices/Techniken befolgen, um eine bessere Abfrageleistung zu erzielen. Einige von ihnen sind unten hervorgehoben:
- Verwenden Sie EXISTS anstelle von IN, um die Existenz von Daten zu prüfen.
2. Vermeiden Sie * in der SELECT-Anweisung. Geben Sie den Namen der gewünschten Spalten an.
3. Wählen Sie den entsprechenden Datentyp. Um zB Strings zu speichern, verwenden Sie varchar anstelle des Datentyps text. Verwenden Sie den Textdatentyp, wenn Sie große Datenmengen (mehr als 8000 Zeichen) speichern müssen.
4. Vermeiden Sie nach Möglichkeit nchar und nvarchar, da beide Datentypen nur doppelt so viel Speicher benötigen wie char und varchar.
5. Vermeiden Sie NULL in Feldern mit fester Länge. Falls NULL erforderlich ist, verwenden Sie ein Feld mit variabler Länge (varchar), das weniger Platz für NULL benötigt.
6. Vermeiden Sie es, eine Klausel zu haben. Die Having-Klausel ist erforderlich, wenn Sie das Ergebnis einer Aggregation weiter filtern möchten.
7. Erstellen Sie geclusterte und nicht geclusterte Indizes.
8. Clustered-Index klein halten, da die im Clustered-Index verwendeten Felder auch im Non-Clustered-Index verwendet werden können.
9. Die meisten selektiven Spalten sollten ganz links im Schlüssel eines nicht gruppierten Index platziert werden.
10. Löschen Sie unbenutzte Indizes.
11. Erstellen Sie besser Indizes für Spalten, die statt Zeichen ganzzahlige Werte haben. Ganzzahlwerte verbrauchen weniger Overhead als Zeichenwerte.
12. Verwenden Sie Verknüpfungen anstelle von Unterabfragen.
13. Verwenden Sie WHERE-Ausdrücke, um die Größe von Ergebnistabellen zu begrenzen, die mit Joins erstellt werden.
14. Verwenden Sie TABLOCKX beim Einfügen in eine Tabelle und TABLOCK beim Zusammenführen.
15. Verwenden Sie WITH (NOLOCK) beim Abfragen der Daten aus einer beliebigen Tabelle.
16. Verwenden Sie SET NOCOUNT ON und TRY-CATCH, um eine Deadlock-Bedingung zu vermeiden.
17. Vermeiden Sie Cursor, da Cursor sehr langsam in der Leistung sind.
18. Verwenden Sie Tabellenvariable anstelle von Temp-Tabelle. Die Verwendung von Temp-Tabellen erforderte eine Interaktion mit der TempDb-Datenbank, was eine zeitaufwändige Aufgabe ist.
19. Verwenden Sie nach Möglichkeit UNION ALL anstelle von UNION.
20. Verwenden Sie den Schemanamen vor dem Namen des SQL-Objekts.
21. Verwenden Sie gespeicherte Prozeduren für häufig verwendete Daten und komplexere Abfragen.
22. Halten Sie die Transaktion so klein wie möglich, da die Transaktion die Verarbeitungstabellendaten sperrt und zu Deadlocks führen kann.
23. Vermeiden Sie das Präfix „sp_“ mit dem Namen der benutzerdefinierten gespeicherten Prozedur, da der SQL-Server zuerst die benutzerdefinierte Prozedur in der Master-Datenbank und danach in der Datenbank der aktuellen Sitzung durchsucht.
24. Vermeiden Sie die Verwendung einer nicht korrelierten skalaren Unterabfrage. Verwenden Sie diese Abfrage als separate Abfrage anstelle eines Teils der Hauptabfrage, und speichern Sie die Ausgabe in einer Variablen, auf die in der Hauptabfrage oder einem späteren Teil des Stapels verwiesen werden kann.
25. Vermeiden Sie Tabellenwertfunktionen (TVFs) mit mehreren Anweisungen. TVFs mit mehreren Anweisungen sind teurer als Inline-TVFs.
Wie wir oben gesehen haben, gibt es in SQL Server mehrere Schritte, die Sie unternehmen können, um die Leistung Ihrer Abfragen und Datenbank als Ganzes zu verbessern. Es gibt viele Schritte, die auch für andere RDBMS wie ORACLE gelten.
- Verwenden Sie EXPLAIN PLAN oder AUTOTRACE, um den Ausführungsplan Ihrer Abfragen zu analysieren und Probleme bei ihrer Ausführung zu identifizieren.
- Verwenden Sie den INDEX-Hinweis, um anzugeben, welcher Index vom Optimierer für eine bestimmte Abfrage verwendet werden soll.
- Erwägen Sie die Verwendung von Hinweisen wie FULL oder INDEX_FFS, um den Optimierer zu zwingen, einen vollständigen Tabellenscan bzw. einen schnellen vollständigen Indexscan zu verwenden.
- Verwenden Sie den Hinweis OPTIMIZER_MODE, um einen bestimmten Optimierungsmodus für eine Abfrage anzugeben.
- Erwägen Sie die Verwendung materialisierter Ansichten, um häufig aufgerufene Daten vorab zu berechnen und zu speichern, was die Leistung von Abfragen verbessern kann, die auf diese Daten zugreifen.
- Verwenden Sie das DBMS_STATS-Paket, um Statistiken über Ihre Datenbank und ihre Objekte zu analysieren und zu sammeln, was dem Optimierer helfen kann, fundiertere Entscheidungen beim Erstellen von Ausführungsplänen zu treffen.
- Erwägen Sie die Partitionierung, um große Tabellen in kleinere, besser verwaltbare Teile aufzuteilen, was die Leistung von Abfragen verbessern kann, die auf diese Tabellen zugreifen.
- Verwenden Sie den SQL Tuning Advisor, um potenzielle Leistungsprobleme mit Ihren SQL-Anweisungen zu identifizieren und zu beheben.
- Dies sind nur einige der vielen Techniken, mit denen Sie die Leistung Ihrer Oracle SQL-Abfragen und -Datenbanken verbessern können. Es ist wichtig zu bedenken, dass die spezifischen Schritte, die Sie ausführen müssen, von Ihrer spezifischen Datenbank und Arbeitslast abhängen.
- Es ist immer eine gute Idee, sich an einen Datenbankadministrator oder andere Experten zu wenden, wenn Sie Leistungsprobleme haben.
Viele Möglichkeiten, GCP über die Feiertage kostenlos mit Google Cloud zu lernen
Verständnis --
Linux-Befehle für Cloud Learning
Viel Spaß beim Lesen ….. Viel Spaß beim Lernen!

![Was ist überhaupt eine verknüpfte Liste? [Teil 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































