Heim  >  Artikel  >  Datenbank  >  Welche verschiedenen Methoden zur Datenbank-SQL-Optimierung gibt es?

Welche verschiedenen Methoden zur Datenbank-SQL-Optimierung gibt es?

青灯夜游
青灯夜游Original
2021-04-23 17:37:0238278Durchsuche

Methoden: 1. Versuchen Sie, vollständige Tabellenscans zu vermeiden. 3. Versuchen Sie, parametrisierte SQL-Anweisungen zu verwenden. 5. Verwenden Sie die Where-Klausel. 6. Verwenden Sie beim Verbinden mehrerer Tabellen Tabellenaliase. 7. Vermeiden Sie die Verwendung von Cursorn usw.

Welche verschiedenen Methoden zur Datenbank-SQL-Optimierung gibt es?

Die Betriebsumgebung dieses Tutorials: Windows7-System, MySQL8-Version, Dell G3-Computer.

1. Erstellen Sie einen Index

1. Um vollständige Tabellenscans zu vermeiden, sollten Sie zunächst Indizes für die beteiligten Spalten erstellen und nach

2 ordnen abgerufen Wenn Sie beispielsweise anhand des Tabellenfelds „Benutzername“ suchen möchten, sollten Sie einen Index für das Namensfeld erstellen. Wenn Sie häufig anhand der Mitarbeiterabteilung und der Stellenebene des Mitarbeiters suchen möchten, sollten Sie einen Index für die beiden Felder erstellen der Mitarbeiterabteilung und der Mitarbeiterjobebene.

(2) Die Leistungsverbesserung durch die Erstellung eines Index zum Abruf ist oft enorm. Wenn Sie also feststellen, dass die Abrufgeschwindigkeit zu langsam ist, sollten Sie als Erstes daran denken, einen Index zu erstellen.

(3) Es ist am besten, nicht mehr als 6 Indizes in einer Tabelle zu haben. Wenn es zu viele sind, sollten Sie überlegen, ob es notwendig ist, Indizes für einige Spalten zu erstellen, die nicht häufig verwendet werden. Je mehr Indizes, desto besser. Obwohl der Index die Effizienz der entsprechenden Auswahl verbessern kann, verringert er auch die Effizienz des Einfügens und Aktualisierens, da der Index möglicherweise während des Einfügens oder Aktualisierens neu erstellt wird. Daher muss beim Erstellen des Index sorgfältig vorgegangen werden je nach konkreter Situation berücksichtigt.

2. Vermeiden Sie die Verwendung von Berechnungen für Indizes.

Wenn die Indexspalte Teil einer Berechnung oder Funktion ist, verwendet der DBMS-Optimierer nicht den Index, sondern die vollständige Tabellenabfrage Berechnung. , EXISTS wird normalerweise in in verwendet und existiert gleichzeitig, da in keinen Index verwendet Benutzereingaben Bei der Ausführung von SQL sollten Sie versuchen, parametrisiertes SQL zu verwenden. Dadurch werden nicht nur Angriffe durch SQL-Injection-Schwachstellen vermieden, sondern das Wichtigste ist auch, dass die Datenbank diese parametrisierten SQL vorkompiliert, sodass das DBMS eine Abfrageoptimierung für diese SQL durchführt Anweisung, wenn sie zum ersten Mal ausgeführt wird, und führen Sie eine Vorkompilierung durch, sodass bei der zukünftigen Ausführung dieser SQL das vorkompilierte Ergebnis direkt verwendet wird, was die Ausführungsgeschwindigkeit erheblich verbessern kann.

4. Versuchen Sie, mehrere SQL-Anweisungen in einer SQL-Anweisung zu komprimieren.

Jedes Mal, wenn Sie SQL ausführen, müssen Sie eine Netzwerkverbindung herstellen, eine Berechtigungsüberprüfung durchführen, die Abfrage der SQL-Anweisung optimieren und die Ausführungsergebnisse senden ist sehr zeitaufwändig, daher sollten Sie versuchen, die Ausführung zu vieler SQL-Anweisungen zu vermeiden. Wenn Sie sie in eine SQL-Anweisung komprimieren können, verwenden Sie nicht mehrere Anweisungen zur Ausführung.

5. Ersetzen Sie die HAVING-Klausel durch die where-Klausel.

Vermeiden Sie die Verwendung der HAVING-Klausel, da HAVING die Ergebnismenge erst nach dem Abrufen aller Datensätze filtert, während where die Datensätze vor der Aggregation löscht, wenn Sie die where-Klausel übergeben können Durch die Anzahl der Datensätze kann dieser Overhead verringert werden. Die Bedingungen in HAVING werden im Allgemeinen zum Filtern von Aggregatfunktionen verwendet. Darüber hinaus sollten die Bedingungen in die where-Klausel geschrieben werden.

6. Verwenden Sie Tabellenaliase

Wenn Sie mehrere Tabellen in einer SQL-Anweisung verbinden, verwenden Sie bitte Tabellenaliase und stellen Sie den Aliasnamen jedem Spaltennamen voran. Dies kann die Parsing-Zeit verkürzen und Grammatikfehler reduzieren, die durch Mehrdeutigkeiten in den Namen von Friend-Spalten verursacht werden.

7. Ersetzen Sie Union durch Union All

Wenn die SQL-Anweisung die Vereinigung zweier Abfrageergebnismengen erfordert, versuchen die beiden Ergebnismengen auch dann zusammenzuführen, wenn die Abrufergebnisse keine doppelten Datensätze enthalten. und dann wird vor der Ausgabe der Endergebnisse eine Sortierung durchgeführt. Wenn also festgestellt werden kann, dass die Suchergebnisse keine doppelten Datensätze enthalten, sollte Union All verwendet werden, um die Effizienz zu verbessern.

8. Erwägen Sie die Verwendung von „temporären Tabellen“, um Zwischenergebnisse vorübergehend zu speichern.

Eine wichtige Möglichkeit zur Vereinfachung von SQL-Anweisungen ist die Verwendung temporärer Tabellen zur vorübergehenden Speicherung von Zwischenergebnissen Die nachfolgenden Abfragen werden in temporären Tabellen gespeichert, wodurch mehrere Scans der Haupttabelle im Programm vermieden werden können und die „Aktualisierungssperre“ während der Programmausführung erheblich reduziert wird, wodurch Blockierungen reduziert und die Parallelitätsleistung verbessert werden .

Aber Sie müssen auch vermeiden, häufig temporäre Tabellen zu erstellen und zu löschen, um den Verbrauch von Systemtabellenressourcen zu reduzieren.

9. Verwenden Sie die Transaktionsanfangsübersetzung nur, wenn dies erforderlich ist.

Eine SQL-Anweisung in SQL Server ist standardmäßig eine Transaktion und wird standardmäßig festgeschrieben, nachdem die Anweisung ausgeführt wurde. Tatsächlich handelt es sich dabei um eine minimierte Form von begin tran, genau wie am Anfang jeder Anweisung ein begin tran und am Ende ein commit impliziert wird.

In einigen Fällen müssen wir begin tran explizit deklarieren. Wenn wir beispielsweise „Einfügungs-, Lösch- und Änderungsvorgänge“ durchführen, müssen wir mehrere Tabellen gleichzeitig ändern erfolgreich oder keine der Änderungen war erfolgreich. begin tran kann eine solche Rolle spielen. Es kann mehrere SQL-Anweisungen gleichzeitig ausführen und schließlich gemeinsam festschreiben. Der Vorteil besteht darin, dass die Datenkonsistenz gewährleistet ist, aber nichts perfekt ist. Der von Begin tran gezahlte Preis besteht darin, dass vor der Übermittlung alle durch SQL-Anweisungen gesperrten Ressourcen erst freigegeben werden können, wenn sie festgeschrieben werden.

Es ist ersichtlich, dass die Leistung der Datenbank schrecklich ist, wenn Begin tran zu viele SQL-Anweisungen abfängt. Bevor die große Transaktion festgeschrieben wird, werden zwangsläufig andere Anweisungen blockiert, was zu vielen Blockaden führt.

Das Prinzip der Verwendung von Begin tran besteht darin, dass unter der Voraussetzung der Gewährleistung der Datenkonsistenz gilt: Je weniger SQL-Anweisungen von begin tran abgefangen werden, desto besser! In einigen Fällen können Trigger zum Synchronisieren von Daten verwendet werden, und begin tran wird nicht unbedingt verwendet.

10. Vermeiden Sie die Verwendung von Cursorn.

Vermeiden Sie die Rückgabe großer Datenmengen an den Client. Wenn die Datenmenge zu groß ist, sollten Sie überlegen, ob die entsprechenden Anforderungen angemessen sind. Da die Effizienz von Cursorn schlecht ist, sollten Sie ein Umschreiben in Betracht ziehen, wenn die vom Cursor verarbeiteten Daten 10.000 Zeilen überschreiten.

Elf. Verwenden Sie varchar/nvarchar anstelle von char/nchar

Weitere Programmierkenntnisse finden Sie unter: Einführung in die Programmierung! !

Das obige ist der detaillierte Inhalt vonWelche verschiedenen Methoden zur Datenbank-SQL-Optimierung gibt es?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn