ホームページ  >  記事  >  データベース  >  mysqlインデックスが有効にならない問題の解決策

mysqlインデックスが有効にならない問題の解決策

一个新手
一个新手オリジナル
2017-09-30 10:33:131441ブラウズ

最近、会社がサービスに使用している 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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。