Zu den häufig verwendeten Methoden zur SQL-Optimierung gehören: 1. Vermeiden Sie vollständige Tabellenscans und erwägen Sie die Erstellung von Indizes für die beteiligten Spalten in „Where“ und „Ordnung nach“. 2. Vermeiden Sie Nullwerturteile für Felder in der Where-Klausel . Verwenden Sie „in“ und „nicht in“ mit Vorsicht. 4. Versuchen Sie, große Transaktionsvorgänge zu vermeiden und die Systemparallelität zu verbessern.
1. Warum sollten wir SQL optimieren? Effizienz und das Entwicklungs-, Betriebs- und Wartungspersonal können nicht beurteilen, wie effizient SQL bei der Ausführung des Programms ist, sodass eine spezielle Optimierung von SQL selten durchgeführt wird. Der Einfluss der SQL-Ausführungseffizienz auf die Laufeffizienz des Programms nimmt allmählich zu und es ist zu diesem Zeitpunkt erforderlich, SQL zu optimieren.
1 Um die Abfrage zu optimieren, sollten Sie zunächst in Betracht ziehen, Indizes für die beteiligten Spalten zu erstellen. 2. Versuchen Sie, eine Nullwertbeurteilung von Feldern in der where-Klausel zu vermeiden, 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
Sie können den Standardwert 0 für num festlegen, um dies sicherzustellen Diese Zahl in der Tabelle hat keinen Nullwert, und fragen Sie dann wie folgt ab:
select id from t where num=0
3 Versuchen Sie, die Operatoren != oder a8093152e673feb7aba1828c43532094 in der where-Klausel zu vermeiden, da die Engine sonst die Verwendung des Index and aufgibt Führen Sie einen vollständigen Tabellenscan durch.
4. Vermeiden Sie die Verwendung von oder in der where-Klausel, um Bedingungen zu verbinden, da die Engine sonst die Verwendung des Index aufgibt und einen vollständigen Tabellenscan durchführt, 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=205 .in und nicht in Es sollte auch mit Vorsicht verwendet werden, da es sonst zu einem vollständigen Tabellenscan führt, wie zum Beispiel:
select id from t where num in(1,2,3)Für kontinuierliche Werte, wenn Sie zwischen verwenden können, verwenden Sie nicht in:
select id from t where num between 1 and 3
select id from t where name like '%abc%'7 Versuchen Sie, Ausdrucksoperationen für Felder in der where-Klausel zu vermeiden, da dies dazu führen würde, dass die Engine die Verwendung des Index aufgibt und einen vollständigen Tabellenscan durchführt. Beispiel:
select id from t where num/2=100sollte geändert werden in:
select id from t where num=100*28 Sie sollten versuchen, funktionale Operationen für Felder in der where-Klausel zu vermeiden, da dies dazu führen würde, dass die Engine die Verwendung des Index aufgibt und einen vollständigen Tabellenscan durchführt . Beispiel:
select id from t where substring(name,1,3)='abc'--name以abc开头的idsollte geändert werden in:
select id from t where name like 'abc%'
10. Wenn Sie ein Indexfeld als Bedingung verwenden und der Index ein zusammengesetzter Index ist, muss das erste Feld im Index als Bedingung verwendet werden, um sicherzustellen, dass das System den Index verwendet, andernfalls wird der Index nicht verwendet. Und die Feldreihenfolge sollte so weit wie möglich mit der Indexreihenfolge übereinstimmen.
11. Schreiben Sie keine bedeutungslosen Abfragen, z. B. das Generieren einer leeren Tabellenstruktur:
select col1,col2 into #t from t where 1=0
Dieser Codetyp gibt keine Ergebnismenge zurück, verbraucht jedoch Systemressourcen. Er sollte wie folgt geändert werden:
create table #t(...)
12 . Oft ist es eine gute Wahl, „exists“ anstelle von „in“ zu verwenden. Ersetzen Sie es durch die folgende Anweisung: „
select num from a where num in(select num from b)“13 Indexspalte Wenn eine große Menge doppelter Daten vorhanden ist, verwendet die SQL-Abfrage möglicherweise keinen Index. Wenn beispielsweise in einer Tabelle ein Feld „Geschlecht“ vorhanden ist und fast die Hälfte männlich und die Hälfte weiblich ist, wird ein Index erstellt Beim Sex hat dies keinen Einfluss auf die Abfrageeffizienz.
14. Je mehr Indizes vorhanden sind, desto besser kann der Index die Effizienz des Einfügens und Aktualisierens verbessern.
Da der Index beim Einfügen oder Aktualisieren neu erstellt werden kann index Eine sorgfältige Überlegung ist erforderlich und hängt von den Umständen ab.
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.
15. Versuchen Sie, numerische Felder zu verwenden, versuchen Sie, sie nicht als Zeichenfelder zu gestalten. Dies verringert die Leistung der Abfrage und der Verbindung 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 für numerische Typen nur ein Vergleich ausreicht.
16. Verwenden Sie so oft wie möglich varchar anstelle von char, da Felder mit variabler Länge erstens wenig Speicherplatz haben und Speicherplatz sparen können.
Zweitens ist die Sucheffizienz in einem relativ kleinen Feld offensichtlich höher .
17. Verwenden Sie „select * from t“ nirgendwo, ersetzen Sie „*“ durch eine bestimmte Feldliste und geben Sie keine nicht verwendeten Felder zurück.
18. Vermeiden Sie das häufige Erstellen und Löschen temporärer Tabellen, um den Verbrauch von Systemtabellenressourcen zu reduzieren.
19. Temporäre Tabellen sind nicht unbrauchbar, und ihre ordnungsgemäße Verwendung kann bestimmte Routinen effizienter machen, beispielsweise wenn Sie wiederholt auf einen bestimmten Datensatz in einer großen Tabelle oder einer häufig verwendeten Tabelle verweisen müssen. Für einmalige Ereignisse ist es jedoch besser, eine Exporttabelle zu verwenden.
20. Wenn beim Erstellen einer temporären Tabelle die auf einmal eingefügte Datenmenge groß ist, können Sie „Auswählen in“ anstelle von „Tabelle erstellen“ verwenden, um zu vermeiden, dass eine große Anzahl von Protokollen entsteht,
um die Geschwindigkeit zu verbessern Die Datenmenge ist nicht groß. Um die Systemtabelle für Ressourcen zu vereinfachen, sollte zuerst eine Tabelle erstellt und dann eingefügt werden.
21. Wenn temporäre Tabellen verwendet werden, müssen alle temporären Tabellen am Ende der gespeicherten Prozedur explizit gelöscht werden, zuerst die Tabelle abschneiden und dann die Tabelle löschen, um eine langfristige Sperrung der Systemtabellen zu vermeiden.
22. Vermeiden Sie die Verwendung von Cursorn, da Cursor weniger effizient sind. Wenn die vom Cursor verarbeiteten Daten 10.000 Zeilen überschreiten, sollten Sie darüber nachdenken, sie neu zu schreiben.
23. Bevor Sie die Cursor-basierte Methode oder die temporäre Tabellenmethode verwenden, sollten Sie zunächst nach einer satzbasierten Lösung zur Lösung des Problems suchen. Die satzbasierte Methode ist normalerweise effektiver.
24. Cursor sind wie temporäre Tabellen nicht unbrauchbar. Die Verwendung von FAST_FORWARD-Cursoren ist bei kleinen Datensätzen oft besser als andere zeilenweise Verarbeitungsmethoden, insbesondere wenn mehrere Tabellen referenziert werden müssen, um die erforderlichen Daten zu erhalten.
Routinen, die „Summen“ in die Ergebnismenge einbeziehen, sind in der Regel schneller durchzuführen als die Verwendung von Cursorn. Wenn es die Entwicklungszeit zulässt, können Sie sowohl die Cursor-basierte Methode als auch die Satz-basierte Methode ausprobieren, um herauszufinden, welche Methode besser funktioniert.
25. Versuchen Sie, große Transaktionsvorgänge zu vermeiden und die Systemparallelität zu verbessern.
26. 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.
Verwandte Empfehlungen: „PHP-Tutorial“, „MySQL-Tutorial“
Das obige ist der detaillierte Inhalt vonWas sind die am häufigsten verwendeten Methoden zur SQL-Optimierung?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!