Heim >Datenbank >MySQL-Tutorial >20 Optimierungszusammenfassung von MySQL
Der Inhalt dieses Artikels befasst sich mit der Optimierungszusammenfassung von MySQL. Ich hoffe, dass er für Freunde hilfreich ist.
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.
Langsame Netzwerkgeschwindigkeit, unzureichender Speicher, geringer E/A-Durchsatz, voller Speicherplatz und andere Hardwareprobleme
Es gibt keinen Index oder der Index ist ungültig
Die Datentabelle enthält zu viele Datensätze
Serveroptimierung und verschiedene Parametereinstellungen Es kann sich auch auf die Effizienz von SQL auswirken, das von Entwicklern geschrieben wurde
Andere
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.
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.
, 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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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!