Heim  >  Artikel  >  Datenbank  >  20 Optimierungszusammenfassung von MySQL

20 Optimierungszusammenfassung von MySQL

不言
不言nach vorne
2018-10-08 15:20:471792Durchsuche

Der Inhalt dieses Artikels befasst sich mit der Optimierungszusammenfassung von MySQL. Ich hoffe, dass er für Freunde hilfreich ist.

Vorwort

Datenbankoperationen sind heutzutage zunehmend zum Leistungsengpass der gesamten Anwendung geworden, insbesondere bei Webanwendungen. Deshalb habe ich einige Vorschläge zur MySQL-Optimierung zusammengestellt. Ich hoffe, dass diese Optimierungstechniken für Sie nützlich sind. Wenn Sie sie nicht zusammenfassen können, können Sie sie gerne hinzufügen.

Gründe für langsame SQL-Ausführung

  1. Langsame Netzwerkgeschwindigkeit, unzureichender Speicher, geringer E/A-Durchsatz, voller Speicherplatz und andere Hardwareprobleme

  2. Es gibt keinen Index oder der Index ist ungültig

  3. Die Datentabelle enthält zu viele Datensätze

  4. Serveroptimierung und verschiedene Parametereinstellungen Es kann sich auch auf die Effizienz von SQL auswirken, das von Entwicklern geschrieben wurde

  5. Andere

1. EXPLAIN Analysieren Sie Ihre SELECT-Abfrage

In vielen Fällen können Sie durch die Verwendung des Schlüsselworts EXPLAIN erfahren, wie MySQL Ihre SQL-Anweisung verarbeitet, was Ihnen dabei helfen kann, Ihre Abfrageanweisung zu analysieren und möglicherweise so schnell wie möglich Optimierungen zu finden . Methoden und mögliche Leistungsprobleme. Informationen zur spezifischen Verwendung von EXPLAIN und zur Bedeutung der einzelnen Parameter finden Sie in den entsprechenden Dokumenten.

2. Die SELECT-Abfrage muss den Feldnamen angeben.

Die SELECT *-Abfrage führt zu viel unnötigem Verbrauch (z. B. CPU, E/A usw.). Es kann auch dazu führen, dass abdeckende Indizes verwendet werden. Daher ist es bei der Durchführung einer SELECT-Abfrage erforderlich, am Ende direkt den entsprechenden abzufragenden Feldnamen anzugeben.

3. Verwenden Sie beim Abfragen eines Datenelements LIMIT 1

, um redundante Abfragen zu reduzieren, da nach der Angabe von Limit 1 die Abfrage nach dem Abfragen eines Datenelements nicht mehr fortgesetzt wird Typspalte in EXPLAIN Um den const-Typ zu erreichen, ist die Abfrageanweisung besser.

4. Erstellen Sie einen Index für das gesuchte WHERE-Feld

Im Allgemeinen legen wir für jede Tabelle einen Primärschlüssel fest, und der Index ist nicht unbedingt der Primärschlüssel. Wenn es in Ihrer Tabelle ein Feld gibt, das Sie immer für WHERE-Abfragen und -Suchen verwenden und das mehr gelesen als geschrieben wird, dann erstellen Sie bitte einen Index dafür. Wenn Sie mehr über die Prinzipien der Indizierung erfahren möchten, können Sie dies tun gefunden werden.

5. Verwenden Sie niemals ORDER BY RAND()

Wenn Sie Daten zufällig abrufen möchten, werden Sie möglicherweise direkt aufgefordert, Zufallszahlen zu verwenden. Denken Sie daran, dass Sie zu diesem Zeitpunkt steuern müssen Ihr Gehirn, in diese Richtung weiterzudenken und diesen schrecklichen Gedanken zu stoppen. Denn diese Art der Abfrage hat keinen Vorteil für die Leistung der Datenbank (verbraucht CPU). Eine der besseren Lösungen besteht darin, zuerst die Anzahl N der Daten zu ermitteln und dann mit LIMIT N, 1 eine solche Abfrage durchzuführen.

Stellen Sie sicher, dass jede Tabelle eine Primärschlüssel-ID hat.

Wir sollten es uns zur Gewohnheit machen, jedes Mal, wenn wir eine neue Tabelle erstellen, ein ID-Feld dafür zu entwerfen Primärschlüssel, vorzugsweise vom Typ INT (einige verwenden auch UUID), und setzen Sie das ID-Feld auf das Flag AUTO_INCREMENT.

8. Verwenden Sie NOT NULL so oft wie möglich.

Denken Sie nicht, dass NULL keinen Platz benötigt. Vielleicht haben es viele Leute aber nicht bemerkt Es ist beim Abfragen und Vergleichen auf NULL-Felder gestoßen, was problematischer ist. Wenn Sie wirklich NULL benötigen, ist dies natürlich kein Problem. Andernfalls wird empfohlen, NOT NULL zu verwenden.

8. Wählen Sie die geeignete Speicher-Engine

Es gibt zwei Speicher-Engines, MyISAM und InnoDB. Beide haben ihre eigenen Vor- und Nachteile, daher müssen wir die Unterschiede zwischen den beiden verstehen und dann die beste Entscheidung treffen, zum Beispiel unterstützt InnoDB Transaktionen, MyISAM jedoch nicht, MyISAM-Abfragen sind schneller als InnoDB usw. Kurz gesagt, wenn Sie nicht wissen, was Sie wählen sollen, dann verwenden Sie InnoDB.

9. Speichern Sie die IP-Adresse als UNSIGNED INT

Wenn Sie auf die Notwendigkeit stoßen, die IP-Adresse zu speichern, ist der erste Gedanke vieler Menschen, den Zeichenfolgentyp VARCHAR (15) zu speichern, und das würden Sie nicht tun Ich denke nicht daran, den Ganzzahltyp INT zum Speichern zu verwenden. Wenn Sie den Ganzzahltyp zum Speichern verwenden, sind nur 4 Bytes erforderlich, und Sie können Felder mit fester Länge haben, was Ihnen Vorteile bei der Abfrage bringt.

10. Versuchen Sie, den Nullwert eines Feldes während der WHERE-Abfrage nicht zu beurteilen.

Wir alle wissen, dass es langsamer ist, wenn wir ein Feld als Null beurteilen Die Beurteilung führt dazu, dass die Engine die Verwendung aller vorhandenen Indizes aufgibt und eine vollständige Tabellenscansuche durchführt.

11. Versuchen Sie, keine LIKE-Fuzzy-Abfrage mit dem Präfix % zu verwenden

Fuzzy-Abfrage, wir begegnen ihr oft in der täglichen Entwicklung, aber ich glaube, dass viele Leute direkt LIKE '%key_word%' oder LIKE '%key_word' suchen Auf diese Weise führen diese beiden Suchmethoden dazu, dass der Index fehlschlägt und eine vollständige Tabellenscansuche durchgeführt wird. Wenn Sie die obige Fuzzy-Abfrage lösen möchten, verwenden Sie „Volltextindex verwenden“. Wenn Sie an der spezifischen Verwendung interessiert sind, können Sie die Informationen selbst überprüfen.

12. Vermeiden Sie die Ausführung von Ausdrucksoperationen für Felder während WHERE-Abfragen.

Zum Beispiel führt eine solche Abfrage in der Abfrageanweisung SELECT id FROM table WHERE num * 2 = 50; eine arithmetische Operation aus, bei der die Feldnummer mit 2 multipliziert wird. Verursacht Indexfehler.

14. Reduzieren Sie unnötige Sortiervorgänge

Sortiervorgänge verbrauchen mehr CPU-Ressourcen, daher kann die Reduzierung unnötiger Sortiervorgänge die SQL-Leistung verringern, wenn die Cache-Trefferquote hoch und die E/A-Antwortzeit ausreichend ist.

14. Es wird empfohlen, JOIN anstelle von Unterabfragen zu verwenden.

Einige Leute werden sagen, dass die Leistung von JOIN nicht sehr gut ist, aber es bietet dennoch große Leistungsvorteile im Vergleich zu Unterabfragen. Insbesondere erfahren Sie mehr über Probleme im Zusammenhang mit dem Ausführungsplan einer Unterabfrage.

15. Implizite Typkonvertierung vermeiden

Typkonvertierung bezieht sich hauptsächlich auf die Typkonvertierung, die auftritt, wenn der Typ des Felds in der WHERE-Klausel nicht mit dem Typ des darin übergebenen Parameters übereinstimmt ist Denn wenn der von uns übergebene Datentyp nicht mit dem Feldtyp übereinstimmt, führt MySQL möglicherweise eine Typkonvertierungsoperation für die von uns übergebenen Daten durch oder verarbeitet sie möglicherweise nicht und übergibt sie direkt zur Verarbeitung an die Speicher-Engine Auf diese Weise kann es sein, dass der Index aufgrund von Nutzungsbedingungen nicht verarbeitet werden kann.

16. Vermeiden Sie inkonsistente Feldtypen in Abfragen mit mehreren Tabellen.

Wenn wir beim Entwerfen der Tabellenstruktur auf eine gemeinsame Abfrage mehrerer Tabellen stoßen, versuchen Sie, die zugehörigen Felder der Tabelle konsistent zu halten die Tabelle und Indizes müssen festgelegt werden. Versuchen Sie gleichzeitig, bei der Durchführung von Verbindungsabfragen mit mehreren Tabellen eine Tabelle mit einer kleinen Ergebnismenge als treibende Tabelle zu verwenden.

17. Es wird empfohlen, den Abfragecache zu aktivieren.

Bei den meisten MySQL-Servern ist dies eine der effektivsten Möglichkeiten, die Leistung zu verbessern Wenn viele der gleichen Abfragen automatisch von der MySQL-Datenbank-Engine verarbeitet werden, werden diese Abfrageergebnisse in einem Cache abgelegt, sodass nachfolgende identische Abfragen nicht die Tabelle bedienen müssen, sondern direkt auf die zwischengespeicherten Ergebnisse zugreifen.

18. Verwenden Sie UNION anstelle einer temporären Tabelle

UNION-Abfrage kann zwei oder mehr SELECT-Abfrageergebnisse in einer Abfrage zusammenführen, sodass zum Vervollständigen keine temporäre Tabelle erstellt werden muss. Es ist zu beachten, dass die Anzahl der Felder in allen SELECT-Anweisungen, die UNION verwenden, gleich sein muss.

19. Verwenden Sie IN-Abfragen mit Vorsicht.

Seien Sie vorsichtig bei IN- und NOT IN-Abfragen, da diese zu einem vollständigen Tabellenscan führen können. Verwenden Sie IN für kontinuierliche Werte möglichst nicht Verwenden Sie ZWISCHEN.

20. Willkommen zum Hinzufügen

Fazit

Hier geht es hauptsächlich um die Optimierung aus der Perspektive der Abfrage sowie um einige Tabellenuntertabellen, Partitionierungstechnologie und Lese- Schreibtrennung; die oben genannte Optimierung Wenn die oben genannten Punkte nicht vorhanden sind, haben Sie bitte Verständnis. Es gibt viele Orte, an denen MySQL optimiert werden kann. Vielen Dank.

Das obige ist der detaillierte Inhalt von20 Optimierungszusammenfassung von MySQL. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:cnblogs.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen