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!