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

一个新手
リリース: 2017-09-30 10:33:13
オリジナル
1487 人が閲覧しました

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

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!