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

MySQL インデックスが有効にならない場合の解決策

黄舟
黄舟オリジナル
2017-09-19 11:03:042312ブラウズ

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

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