最近、会社がサービスに使用している mysql が非常に遅くなり、クエリの実行プランを確認したところ、インデックスが有効になっていないことがわかりました。
ストレージ エンジンは InnoDB を使用します。
初めてメイン データベースでクエリを実行したとき、インデックスが有効にならない理由が常に気になりましたが、スタンバイ データベースに切り替えた後、スタンバイ データベースが有効であることがわかりました。
インデックスに問題があるのではないかと考え始め、インデックスを再構築したところ、効率が大幅に向上したことがわかりました。
比較を記録するだけです。
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)
上記はメインライブラリの実行計画です。
スタンバイデータベースの実行計画を比較します。
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)
クエリ中にスタンバイ データベースがインデックス status_2 に適応していることがわかります。
以下のコマンドを実行すると問題は解決します。
りー
以上がMySQL インデックスが有効にならない場合の解決策の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。