Mehrere Methoden zur Optimierung von SQL-Anweisungen umfassen: 1. Vereinheitlichen Sie das Format von SQL-Anweisungen. 2. Optimieren Sie Abfragen und vermeiden Sie vollständige Tabellenscans. 4. Erwägen Sie die Verwendung von „temporären Tabellen“. Ergebnisse; 5. Versuchen Sie, große Transaktionsvorgänge zu vermeiden. 6. Versuchen Sie, große Datenmengen an den Client zurückzugeben. Der folgende Artikel wird Ihnen einige Details vorstellen und ich hoffe, dass er Ihnen hilfreich sein wird.
In den frühen Tagen unseres Entwicklungsprojekts hatte die Ausführungseffizienz einiger SQL-Anweisungen aufgrund der relativ geringen Menge an Geschäftsdaten keinen Einfluss auf die Effizienz der Programmausführung Offensichtlich ist es für das Entwicklungs-, Betriebs- und Wartungspersonal auch unmöglich, die Effizienz von SQL anhand der laufenden Effizienz des Programms zu beurteilen, sodass mit zunehmender Zeit und zunehmender Menge an Geschäftsdaten selten eine spezielle SQL-Optimierung durchgeführt wird Der Einfluss der SQL-Ausführungseffizienz auf die Laufeffizienz des Programms nimmt allmählich zu. Zu diesem Zeitpunkt ist eine Optimierung von SQL erforderlich.
Mehrere Methoden zur Optimierung von SQL-Anweisungen:
1. Vereinheitlichen Sie das Format von SQL-Anweisungen
Bei den folgenden beiden SQL-Anweisungen denken viele Leute, dass sie gleich sind, aber der Datenbankabfrageoptimierer denkt, dass sie unterschiedlich sind.
● select * from dual
● select * From dual
Obwohl der Fall nur unterschiedlich ist, betrachtet der Abfrageanalysator es als zwei verschiedene SQL-Anweisungen und muss zweimal analysiert werden. . Generieren Sie 2 Ausführungspläne. Daher sollten Sie als Programmierer sicherstellen, dass überall dieselbe Abfrageanweisung konsistent ist. Selbst ein Leerzeichen mehr funktioniert nicht!
2. Verwenden Sie * sparsam , ersetzen Sie „*“ durch eine bestimmte Feldliste und geben Sie keine nicht verwendeten Felder zurück.
3. Um die Abfrage zu optimieren, sollten vollständige Tabellenscans so weit wie möglich vermieden werden
1). Bestellen nach.
2) Versuchen Sie zu vermeiden, Nullwerturteile über Felder in der where-Klausel zu fällen, da die Engine sonst die Verwendung des Index aufgibt und einen vollständigen Tabellenscan durchführt, wie zum Beispiel:
select id from t where num is null
sein kann on num Stellen Sie den Standardwert 0 ein, stellen Sie sicher, dass in der Num-Spalte der Tabelle kein Nullwert vorhanden ist, und fragen Sie dann wie folgt ab:
select id from t where num=0
3). Operatoren in der Where-Klausel, andernfalls führt dies dazu, dass die Engine die Verwendung des Index aufgibt und einen vollständigen Tabellenscan durchführt
4) Vermeiden Sie die Verwendung von or in der Where-Klausel zum Verbinden von Bedingungen, da die Engine sonst aufgibt Verwenden Sie den Index und führen Sie einen vollständigen Tabellenscan durch, z. B.:
select id from t where num=10 or num=20
kann wie folgt abgefragt werden:
select id from t where num=10 union all select id from t where num=20
5), verwenden Sie in und nicht in mit Vorsicht, da dies sonst zu a führt vollständiger Tabellenscan, wie zum Beispiel:
select id from t where num in(1,2,3)
Für kontinuierliche Werte können Sie zwischen Nicht verwenden in:
select id from t where num between 1 and 3
6), sinnvolle Verwendung einer Fuzzy-Abfrage
Manchmal müssen Sie einige Fuzzy-Abfragen durchführen, wie zum Beispiel:
select * from contact where username like ‘%yue%’
Schlüsselwort %yue%. Da „%“ vor yue verwendet wird, muss die Abfrage die gesamte Tabelle durchsuchen, sofern dies nicht erforderlich ist Fügen Sie %
7) vor den Schlüsselwörtern hinzu. Vermeiden Sie es, Felder in der where-Klausel auszudrücken. Dies führt dazu, dass die Engine die Verwendung des Index aufgibt und einen vollständigen Tabellenscan durchführt. Beispiel:
select id from t where num/2=100
sollte geändert werden in:
select id from t where num=100*2
8). indizieren und einen vollständigen Tabellenscan durchführen. Beispiel:
Fragen Sie die ID ab, deren Name mit abc beginnt.
select id from t where substring(name,1,3)='abc'
sollte geändert werden in:
select id from t where name like 'abc%'
4. Verwendung existiert statt in
Oft ist es eine gute Wahl, „exists“ anstelle von „in“ zu verwenden. Exists überprüft nur die Existenz und seine Leistung ist viel besser als in. Beispiel:
select num from a where num in(select num from b)
Ersetzen Sie es durch die folgende Anweisung:
select num from a where exists(select 1 from b where num=a.num)
5. Schreiben Sie keine zu langen und überflüssigen SQL-Anweisungen und verwenden Sie niemals einen einzigen Satz zwei Sätze
Im Allgemeinen werden die Ergebnisse einer Select-Anweisung als Teilmenge verwendet und dann wird die Abfrage aus der Teilmenge ausgeführt. Diese Art von verschachtelter Anweisung ist relativ häufig, aber erfahrungsgemäß häufiger Bei drei Verschachtelungsebenen kann der Abfrageoptimierer leicht falsche Ausführungspläne liefern. Weil es fassungslos war. Dinge wie künstliche Intelligenz sind letztendlich der menschlichen Auflösung unterlegen. Wenn Menschen schwindelig sind, kann ich garantieren, dass auch der Datenbank schwindelig wird.
Darüber hinaus kann der Ausführungsplan wiederverwendet werden. Je einfacher die SQL-Anweisung, desto höher ist die Wahrscheinlichkeit einer Wiederverwendung. Solange sich ein Zeichen in einer komplexen SQL-Anweisung ändert, muss es erneut analysiert werden, und dann wird viel Müll in den Speicher gestopft. Es ist denkbar, wie ineffizient die Datenbank sein wird.
6. Erwägen Sie die Verwendung von „temporären Tabellen“, um Zwischenergebnisse vorübergehend zu speichern.
Eine wichtige Möglichkeit, SQL-Anweisungen zu vereinfachen, besteht jedoch darin, temporäre Tabellen zu verwenden, um Zwischenergebnisse vorübergehend zu speichern , die temporäre Tabelle Die Vorteile sind weitaus größer als diese. Die temporären Ergebnisse werden vorübergehend in der temporären Tabelle gespeichert, und nachfolgende Abfragen erfolgen in tempdb. Dadurch können mehrere Scans der Haupttabelle im Programm vermieden werden, und auch die „Freigabe“ wird erheblich reduziert lock“ blockiert die „Update-Sperre“ während der Programmausführung. Dadurch werden Blockierungen reduziert und die Parallelitätsleistung verbessert.
7. Wenn es sich bei dem Index um einen zusammengesetzten Index handelt, muss das erste Feld im Index als Bedingung verwendet werden, um sicherzustellen, dass das System den Index verwendet , werden die Indizes nicht verwendet und die Feldreihenfolge sollte nach Möglichkeit mit der Indexreihenfolge übereinstimmen.
8. Verwenden Sie so viel wie möglich numerische Felder Wenn Felder, die nur numerische Informationen enthalten, nicht als Zeichenfelder gestaltet werden sollten, verringert dies die Leistung von Abfragen und Verbindungen und erhöht den Speicheraufwand .
Das liegt daran, dass die Engine bei der Verarbeitung von Abfragen und Verbindungen jedes Zeichen in der Zeichenfolge einzeln vergleicht und bei numerischen Typen nur ein Vergleich ausreicht.
9. Verwenden Sie so oft wie möglich varchar anstelle von char, da Felder mit variabler Länge erstens wenig Speicherplatz haben und zweitens relativ viel Speicherplatz sparen können kleines Feld Die Sucheffizienz ist offensichtlich höher.
10. Vermeiden Sie das häufige Erstellen und Löschen temporärer Tabellen, um den Verbrauch von Systemtabellenressourcen zu reduzieren.
11. Vermeiden Sie die Verwendung von Cursorn , da Cursor weniger effizient sind. Wenn die vom Cursor bearbeiteten Daten mehr als 10.000 Zeilen umfassen, sollten Sie darüber nachdenken, sie neu zu schreiben.
12. Versuchen Sie, große Transaktionsvorgänge zu vermeiden und die Systemparallelität zu verbessern.
13. Vermeiden Sie die Rückgabe großer Datenmengen an den Kunden . Wenn die Datenmenge zu groß ist, sollten Sie überlegen, ob die entsprechenden Anforderungen angemessen sind.
Empfohlene verwandte Video-Tutorials: „MySQL-Tutorial“
Das Obige ist der gesamte Inhalt dieses Artikels, ich hoffe, dass er für das Lernen aller hilfreich sein wird. Weitere spannende Inhalte finden Sie in den entsprechenden Tutorial-Kolumnen auf der chinesischen PHP-Website! ! !Das obige ist der detaillierte Inhalt vonWie optimiert man eine SQL-Anweisung?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!