Heim > Datenbank > MySQL-Tutorial > Verbessern Sie die Arbeitseffizienz: Tipps zur MySQL-Optimierung

Verbessern Sie die Arbeitseffizienz: Tipps zur MySQL-Optimierung

不言
Freigeben: 2018-11-14 16:54:37
nach vorne
2606 Leute haben es durchsucht

Der Inhalt dieses Artikels befasst sich mit der Verbesserung der Arbeitseffizienz: MySQL-Optimierungskenntnisse, die einen gewissen Referenzwert haben, können auf sie verweisen.

1. Fügen Sie Indizes für alle Spalten hinzu, die für „wo“ verwendet werden, sortieren Sie nach und gruppieren Sie nach

1) Der Index stellt nicht nur sicher, dass ein Datensatz eindeutig gekennzeichnet ist Außerdem ist es der MySQL-Server, der schneller Ergebnisse aus der Datenbank erhält. Auch beim Sortieren spielen Indizes eine sehr wichtige Rolle.

Der MySQL-Index belegt möglicherweise zusätzlichen Speicherplatz und verringert die Leistung beim Einfügen, Löschen und Aktualisieren bis zu einem gewissen Grad. Wenn Ihre Tabelle jedoch mehr als 10 Datenzeilen enthält, kann die Indizierung die Ausführungszeit der Suche erheblich verkürzen.

2) Es wird dringend empfohlen, zum Testen von MySQL-Abfragen „Worst-Case-Datenbeispiele“ zu verwenden, um ein klareres Verständnis dafür zu erhalten, wie sich die Abfrage in der Produktion verhält.

3) Angenommen, Sie führen die folgende Abfrageanweisung in einer Datenbanktabelle mit mehr als 500 Zeilen aus:

mysql>select customer_id, customer_name from customers where customer_id='345546'
Nach dem Login kopieren

Die obige Abfrage zwingt den MySQL-Server, einen vollständigen Tabellenscan durchzuführen, um die zu erhalten gesuchte Daten.

4) Modell: MySQL bietet eine spezielle EXPLAIN-Anweisung, um die Leistung Ihrer Abfrageanweisung zu analysieren. Wenn Sie nach dem Schlüsselwort eine Abfrageanweisung hinzufügen, zeigt MySql alle Informationen an, die der Optimierer über die Anweisung hat.

Wenn wir die EXPLAIN-Anweisung verwenden, um die obige Abfrage zu analysieren, erhalten wir die folgenden Analyseergebnisse:

mysql> explain select customer_id, customer_name from customers where customer_id='140385';
+----+-------------+-----------+------------+------+---------------+------+---------+------+------+----------+-------------+| id | select_type | table     | partitions | type | possible_keys | key  | key_len | ref  | rows | filtered | Extra       |
+----+-------------+-----------+------------+------+---------------+------+---------+------+------+----------+-------------+|  1 | SIMPLE      | customers | NULL       | ALL  | NULL          | NULL | NULL    | NULL |  500 |    10.00 | Using where |
Nach dem Login kopieren

Wie Sie sehen, zeigt der Optimierer sehr wichtige Informationen an, die uns helfen können -Datenbanktabellen optimieren. Zunächst führt MySql einen vollständigen Tabellenscan durch, da die Schlüsselspalte Null ist. Zweitens hat der MySql-Server klargestellt, dass er 500 Datenzeilen scannen wird, um diese Abfrage abzuschließen.

5) Um die obige Abfrage zu optimieren, müssen wir nur einen Index m zur Spalte customer_id hinzufügen:

mysql> Create index customer_id ON customers (customer_Id);
Query OK, 0 rows affected (0.02 sec)
Records: 0  Duplicates: 0  Warnings: 0
Nach dem Login kopieren

Wenn wir die EXPLAIN-Anweisung erneut ausführen, erhalten wir die folgenden Ergebnisse :

mysql> Explain select customer_id, customer_name from customers where customer_id='140385';
+----+-------------+-----------+------------+------+---------------+-------------+---------+-------+------+----------+-------+| id | select_type | table     | partitions | type | possible_keys | key         | key_len | ref   | rows | filtered | Extra |
+----+-------------+-----------+------------+------+---------------+-------------+---------+-------+------+----------+-------+|  1 | SIMPLE      | customers | NULL       | ref  | customer_id   | customer_id | 13      | const |    1 |   100.00 | NULL  |
+----+-------------+-----------+------------+------+---------------+-------------+---------+-------+------+----------+-------+
Nach dem Login kopieren

2. Verwenden Sie Union, um die Like-Anweisung zu optimieren

1) Manchmal müssen Sie möglicherweise den Operator „or“ zum Vergleich in der Abfrage verwenden. Wenn das Schlüsselwort or in der where-Klausel zu häufig verwendet wird, kann es dazu führen, dass der MySQL-Optimierer fälschlicherweise einen vollständigen Tabellenscan auswählt, um Datensätze abzurufen. Die Union-Klausel kann die Ausführung von Abfragen beschleunigen, insbesondere wenn eine der Abfragen über einen optimierten Index verfügt und die andere Abfrage ebenfalls über einen optimierten Index verfügt.

Wenn beispielsweise Indizes für Vorname und Nachname vorhanden sind, führen Sie die folgende Abfrageanweisung aus:

mysql> select * from students where first_name like 'Ade%' or last_name like 'Ade%'
Nach dem Login kopieren

Verglichen mit der obigen Abfrage und der folgenden Abfrage, die Union verwendet, um zwei Abfrageanweisungen zusammenzuführen, Viel langsamer.

mysql> select * from students where first_name like 'Ade%' union all select * from students wherelast_name like 'Ade%'
Nach dem Login kopieren

3. Vermeiden Sie die Verwendung von Ausdrücken mit führenden Platzhaltern

Mysql kann den Index nicht verwenden, wenn die Abfrage führende Platzhalter enthält. Am Beispiel der Studententabelle oben führt die folgende Abfrage dazu, dass MySQL einen vollständigen Tabellenscan durchführt und rechtzeitig einen Index zum Feld „Vorname“ hinzufügt.

mysql> select * from students where first_name like '%Ade'
Nach dem Login kopieren

Mithilfe der EXPLAIN-Analyse werden die folgenden Ergebnisse erhalten:

 | possible_keys | key  | key_len | ref  | rows | filtered | Extra       |
+----+-------------+----------+------------+------+---------------+------+---------+------+------+----------+-------------+|  1 | SIMPLE      | students | NULL       | ALL  | NULL          | NULL | NULL    | NULL |  500 |    11.11 | Using where |
+----+-------------+----------+------------+------+---------------+------+---------+------+------+----------+-------------+
Nach dem Login kopieren

Wie oben gezeigt, scannt MySQL alle 500 Datenzeilen, was die Abfrage extrem langsam macht.

4. Datenbankarchitektur optimieren

1) Normalisierung

Normalisieren Sie zunächst alle Datenbanktabellen, auch wenn es zu Verlusten kommen kann. Wenn Sie beispielsweise zwei Tabellen zum Aufzeichnen von Kunden- und Bestelldaten erstellen müssen, sollten Sie den Kunden anhand der Kunden-ID in der Bestelltabelle referenzieren und nicht umgekehrt. Das folgende Diagramm zeigt die Datenbankarchitektur, die ohne Datenredundanz konzipiert ist.

Verbessern Sie die Arbeitseffizienz: Tipps zur MySQL-Optimierung

5. Verwenden Sie den besten Datentyp

1) MySQL unterstützt verschiedene Datentypen, einschließlich Ganzzahl, Float, Double, Datum , Datum/Uhrzeit, Varchar, Text usw. Beim Entwerfen von Datenbanktabellen sollten Sie versuchen, den kürzesten Datentyp zu verwenden, der die Merkmale erfüllen kann.

Wenn Sie beispielsweise eine Systembenutzertabelle entwerfen und die Anzahl der Benutzer 100 nicht überschreitet, sollten Sie den Typ „TINYINT“ für user_ud verwenden. Der Wertebereich dieses Typs liegt zwischen -128 und 128 . Wenn in einem Feld Werte vom Typ „Datum“ gespeichert werden müssen, ist es besser, den Typ „Datum/Uhrzeit“ zu verwenden, da bei der Abfrage keine komplexe Typkonvertierung erforderlich ist.

Wenn die Werte ausschließlich numerische Typen sind, verwenden Sie Integer. Werte vom Typ Integer sind bei der Durchführung von Berechnungen schneller als Werte vom Typ Text.

Das obige ist der detaillierte Inhalt vonVerbessern Sie die Arbeitseffizienz: Tipps zur MySQL-Optimierung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:segmentfault.com
Erklärung dieser Website
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
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage