ホームページ  >  記事  >  データベース  >  MySQL で主キーの範囲スキャンを伴う遅い「SELECT COUNT(*)」クエリを最適化する方法

MySQL で主キーの範囲スキャンを伴う遅い「SELECT COUNT(*)」クエリを最適化する方法

DDD
DDDオリジナル
2024-10-29 18:49:021032ブラウズ

How to Optimize a Slow

MySQL での遅い "SELECT COUNT(*)" クエリの最適化

大規模なテーブルをクエリする場合、 WHERE 句。範囲基準を含む "SELECT COUNT(*)" クエリに過度の時間がかかる特定のケースを分析してみましょう。

"EXPLAIN" によって提供される説明は、範囲スキャンが発生していることを示唆しています。ただし、完全なカウントとフィルターされたカウントの間のパフォーマンスの不一致はまだ説明されていません。

テーブル定義を調べると、「change_event_id」列が主キーとして機能し、クラスター化された形式で格納されていることがわかります。これは、主キー値がデータとともに同じディスク ページに保存されることを意味します。その結果、主キーの範囲スキャンでは、すべてのデータ ページを読み取る必要があります。

パフォーマンスを向上するには、次の戦略を検討してください:

  • テーブルの最適化: 「OPTIMIZE TABLE」を実行して、ソートされた順序でデータ ページを再編成します。これにより、範囲スキャンが高速化される可能性があります。
  • セカンダリ インデックスの作成: 特に「change_event_id」に非プライマリ インデックスを定義します。 " カラム。これにより、別のインデックス構造が作成され、その列の範囲スキャンをより効率的に実行できるようになります。

さらに、「change_event_id」列を「bigint unsigned」に変更することをお勧めします。ゼロから増加します。これにより、オーバーフローすることなく、より大きな値を格納できるようになります。

これらの最適化を実装すると、範囲基準を使用した "SELECT COUNT(*)" クエリのパフォーマンスが大幅に向上し、フル カウントと同等になります。 .

以上がMySQL で主キーの範囲スキャンを伴う遅い「SELECT COUNT(*)」クエリを最適化する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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