Heim > Datenbank > MySQL-Tutorial > Hauptteil

Lösung dafür, dass der MySQL-Index nicht wirksam wird

黄舟
Freigeben: 2017-09-19 11:03:04
Original
2340 Leute haben es durchsucht

Das vom Unternehmen für Dienste verwendete MySQL war in letzter Zeit beim Abfragen sehr langsam. Ich habe den Ausführungsplan der Abfrage überprüft und festgestellt, dass der Index nicht wirksam wurde.

Die Speicher-Engine verwendet InnoDB.

Als ich zum ersten Mal in der Hauptdatenbank nachfragte, war ich immer neugierig, warum der Index nicht wirksam wurde. Nach dem Wechsel zur Standby-Datenbank stellte ich fest, dass die Standby-Datenbank wirksam war.

Ich begann darüber nachzudenken, ob es ein Problem mit dem Index gab, erstellte dann den Index neu und stellte fest, dass die Effizienz viel höher war.

Zeichnen Sie den Vergleich kurz auf.

mysql> explain select * from runinfo where status in (0, 2, 1, 3, 4, 7, 9, 10);
+----+-------------+---------+-------+---------------+------+---------+------+----------+-------------+
| id | select_type | table   | type  | possible_keys | key  | key_len | ref  | rows     | Extra       |
+----+-------------+---------+-------+---------------+------+---------+------+----------+-------------+
|  1 | SIMPLE      | runinfo | All   | status_2      | NULL | NULL    | NULL |  2378055 | Using where |
+----+-------------+---------+-------+---------------+------+---------+------+----------+-------------+
row in set (0.00 sec)
Nach dem Login kopieren

Das Obige ist der Ausführungsplan der Hauptbibliothek.

Vergleichen Sie den Ausführungsplan der Standby-Datenbank.

mysql> explain select * from runinfo where status in (0, 2, 1, 3, 4, 7, 9, 10);
+----+-------------+---------+-------+---------------+----------+---------+------+------+-------------+
| id | select_type | table   | type  | possible_keys | key      | key_len | ref  | rows | Extra       |
+----+-------------+---------+-------+---------------+----------+---------+------+------+-------------+
|  1 | SIMPLE      | runinfo | range | status_2      | status_2 | 4       | NULL |  116 | Using where |
+----+-------------+---------+-------+---------------+----------+---------+------+------+-------------+
row in set (0.00 sec)
Nach dem Login kopieren

Es ist ersichtlich, dass sich die Standby-Datenbank während der Abfrage an den Indexstatus_2 anpasst.

Nach Ausführung des folgenden Befehls ist das Problem gelöst.

mysql> OPTIMIZE TABLE runinfo;
+------------------+----------+----------+-------------------------------------------------------------------+
| Table            | Op       | Msg_type | Msg_text                                                          |
+------------------+----------+----------+-------------------------------------------------------------------+
| schedule.runinfo | optimize | note     | Table does not support optimize, doing recreate + analyze instead |
| schedule.runinfo | optimize | status   | OK                                                                |
+------------------+----------+----------+-------------------------------------------------------------------+
rows in set (47.13 sec)
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonLösung dafür, dass der MySQL-Index nicht wirksam wird. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!