ホームページ >データベース >mysql チュートリアル >MySQL で WHERE 句を含む COUNT(*) クエリが遅いのはなぜですか?

MySQL で WHERE 句を含む COUNT(*) クエリが遅いのはなぜですか?

DDD
DDDオリジナル
2024-11-02 09:20:03598ブラウズ

Why is My COUNT(*) Query with a WHERE Clause Slow in MySQL?

Where 句を使用した MySQL の COUNT(*) クエリが遅い

COUNT(*) を含む MySQL の遅いクエリに対処する場合、基礎となるものを理解する要因が最も重要です。この特定のケースでは、長い実行時間はクエリ自体や EXPLAIN ステートメントからはすぐにはわかりません。

問題の理解

問題のテーブル、change_event、 Change_event_id 列にクラスター化された主キーがあります。 InnoDB では、個別のインデックス ページに存在する非クラスター化インデックスとは異なり、クラスター化主キーはデータ ページにデータと一緒に保存されます。

クラスター化主キーの範囲スキャンの問題

提示されたクエリは、クラスター化された主キーに対して範囲スキャンを実行します。テーブルの重要な部分をスキャンする必要があります。データ ページがソートされた順序で物理的に保存されていない可能性があり、余分な I/O 操作が発生するため、これには時間がかかる可能性があります。

考えられる解決策

これを最適化するにはクエリを実行する場合は、次の戦略のいずれかまたは両方の実装を検討してください:

  1. テーブルの最適化: OPTIMIZE TABLE を実行すると、テーブル データ ページが再構築され、主キーによって並べ替えられるようになります。範囲スキャンを高速化できる可能性があります。
  2. 追加インデックスの作成:change_event_id 列にのみ非プライマリ インデックスを追加すると、MySQL はデータ ページではなくインデックス ページを迅速にスキャンできるようになります。これにより、パフォーマンスが大幅に向上する可能性があります。

追加の注意:

実際に自動インクリメント列である場合は、change_event_id 列を BIGINT UNSIGNED に変更することを検討してください。ゼロからのスタート。これにより、符号付き整数のオーバーフローによる潜在的な問題が防止されます。

以上がMySQL で WHERE 句を含む COUNT(*) クエリが遅いのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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