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

DDD
リリース: 2024-10-29 18:49:02
オリジナル
958 人が閲覧しました

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 サイトの他の関連記事を参照してください。

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