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)
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)
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!