Heim  >  Artikel  >  Datenbank  >  Lösung für das Problem, dass der MySQL-Index nicht wirksam wird

Lösung für das Problem, dass der MySQL-Index nicht wirksam wird

一个新手
一个新手Original
2017-09-30 10:33:131438Durchsuche

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, baute dann den Index neu auf und stellte fest, dass die Effizienz viel höher war.

Den Vergleich einfach aufzeichnen.


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)

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)

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)

Als ich es mir am nächsten Tag ansah, war ich etwas neugierig, ob neue Daten geschrieben und der Index nicht aktualisiert wurde .

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

Stellungnahme:
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