MySQL での遅い "SELECT COUNT(*)" クエリの最適化
大規模なテーブルをクエリする場合、 WHERE 句。範囲基準を含む "SELECT COUNT(*)" クエリに過度の時間がかかる特定のケースを分析してみましょう。
"EXPLAIN" によって提供される説明は、範囲スキャンが発生していることを示唆しています。ただし、完全なカウントとフィルターされたカウントの間のパフォーマンスの不一致はまだ説明されていません。
テーブル定義を調べると、「change_event_id」列が主キーとして機能し、クラスター化された形式で格納されていることがわかります。これは、主キー値がデータとともに同じディスク ページに保存されることを意味します。その結果、主キーの範囲スキャンでは、すべてのデータ ページを読み取る必要があります。
パフォーマンスを向上するには、次の戦略を検討してください:
さらに、「change_event_id」列を「bigint unsigned」に変更することをお勧めします。ゼロから増加します。これにより、オーバーフローすることなく、より大きな値を格納できるようになります。
これらの最適化を実装すると、範囲基準を使用した "SELECT COUNT(*)" クエリのパフォーマンスが大幅に向上し、フル カウントと同等になります。 .
以上がMySQL で主キーの範囲スキャンを伴う遅い「SELECT COUNT(*)」クエリを最適化する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。