最近、会社がサービスに使用している 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> 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)
翌日見てみると、また新しいデータが書き込まれてインデックスが更新されていないのか少し気になりました。
以上がmysqlインデックスが有効にならない問題の解決策の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。