Jeder Kunde / Benutzer möchte immer eine schnelle Antwort auf seinen Datenabrufprozess. Wir müssen also eine gute Datenbank entwerfen, die die beste Leistung bei der Datenmanipulation bietet, was zur besten Leistung einer Anwendung führt. Es gibt jedoch keine einfache Möglichkeit, die beste Leistung zu definieren, aber wir können mehrere Möglichkeiten zur Verbesserung der SQL-Abfrageleistung auswählen, die unter verschiedene Kategorien fallen, 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. Ich hebe einige von ihnen unten hervor:
1. Verwenden Sie EXISTS anstelle von IN , um das Vorhandensein von Daten zu überprüfen.
2. Vermeiden Sie * in der SELECT-Anweisung. Geben Sie den Namen der Spalten an, die Sie benötigen.
3. Wählen Sie den entsprechenden Datentyp aus. Um beispielsweise Zeichenfolgen zu speichern, verwenden Sie varchar anstelle des Textdatentyps. Verwenden Sie den Datentyp Text, wenn Sie große Datenmengen (mehr als 8000 Zeichen) speichern müssen.
4. Vermeiden Sie nchar und nvarchar wenn möglich, da beide Datentypen nur doppelten Speicher als char und varchar .
5. Vermeiden Sie NULL im Feld mit fester Länge. Wenn NULL erforderlich ist, verwenden Sie das Feld mit variabler Länge (varchar), das weniger Platz für NULL benötigt.
6. Vermeiden Sie Sex. Die Having-Klausel ist erforderlich, wenn Sie das Ergebnis einer Aggregation weiter filtern möchten.
7. Erstellen Sie gruppierte und nicht gruppierte Indizes.
8. Halten Sie den gruppierten Index klein, da die im gruppierten Index verwendeten Felder auch im nicht gruppierten 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 nicht verwendete Indizes.
11. Es ist besser, Indizes für Spalten zu erstellen, die ganzzahlige Werte anstelle von Zeichen enthalten. Ganzzahlige Werte verbrauchen weniger Overhead als Zeichenwerte.
12. Verwenden Sie Joins anstelle von Unterabfragen.
13. Verwenden Sie WHERE-Ausdrücke, um die Größe von Ergebnistabellen zu begrenzen, die mit Verknüpfungen 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 Deadlock-Zustände zu vermeiden.
17. Vermeiden Sie Cursor, da Cursor sehr langsam in der Leistung sind.
18. Verwenden Sie die Tabellenvariable anstelle der temporären Tabelle. Die Verwendung von temporären Tabellen erforderte die 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 der SQL-Objekte.
21. Verwenden Sie Stored Procedure für häufig verwendete Daten und komplexere Abfragen.
22. Halten Sie die Transaktion so klein wie möglich, da die Transaktion die Daten der Verarbeitungstabellen sperrt und zu Deadlocks führen kann.
23. Vermeiden Sie das Präfix „sp_“ mit dem Namen der benutzerdefinierten gespeicherten Prozedur, da SQL Server zuerst die benutzerdefinierte Prozedur in der Masterdatenbank und danach in der aktuellen Sitzungsdatenbank durchsucht.
24. Vermeiden Sie die Verwendung nicht korrelierter skalarer Unterabfragen. 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 in einem späteren Teil des Stapels verwiesen werden kann.
25. Vermeiden Sie TVFs (Table Valued Functions) mit mehreren Anweisungen. TVFs mit mehreren Anweisungen sind teurer als Inline-TVFs.
Viel Spaß beim Lernen!