Where 句を使用した MySQL の COUNT(*) クエリが遅い
COUNT(*) を含む MySQL の遅いクエリに対処する場合、基礎となるものを理解する要因が最も重要です。この特定のケースでは、長い実行時間はクエリ自体や EXPLAIN ステートメントからはすぐにはわかりません。
問題の理解
問題のテーブル、change_event、 Change_event_id 列にクラスター化された主キーがあります。 InnoDB では、個別のインデックス ページに存在する非クラスター化インデックスとは異なり、クラスター化主キーはデータ ページにデータと一緒に保存されます。
クラスター化主キーの範囲スキャンの問題
提示されたクエリは、クラスター化された主キーに対して範囲スキャンを実行します。テーブルの重要な部分をスキャンする必要があります。データ ページがソートされた順序で物理的に保存されていない可能性があり、余分な I/O 操作が発生するため、これには時間がかかる可能性があります。
考えられる解決策
これを最適化するにはクエリを実行する場合は、次の戦略のいずれかまたは両方の実装を検討してください:
追加の注意:
実際に自動インクリメント列である場合は、change_event_id 列を BIGINT UNSIGNED に変更することを検討してください。ゼロからのスタート。これにより、符号付き整数のオーバーフローによる潜在的な問題が防止されます。
以上がMySQL で WHERE 句を含む COUNT(*) クエリが遅いのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。