パフォーマンスを向上させるために InnoDB テーブルの COUNT(*) クエリを最適化する方法

DDD
リリース: 2024-11-02 03:14:02
オリジナル
333 人が閲覧しました

How to Optimize COUNT(*) Queries on InnoDB Tables for Improved Performance?

インデックスを使用した InnoDB の COUNT(*) のパフォーマンス向上

問題:
約 9 個の広大な InnoDB テーブル内の行をカウントするCOUNT(*) または COUNT(id) を介した 100 万件のレコードは、実行に 6 秒以上かかるという重大なパフォーマンス上の課題を引き起こします。

初期最適化試行:
外部ソースを参照すると、 InnoDB にインデックスの使用を強制することで問題が軽減されることが示唆されました。ただし、「SELECT COUNT(id) FROM perf2 USE INDEX (PRIMARY)」を実装してもパフォーマンスは向上しませんでした。

代替解決策:

MySQL 5.1.6 以降のバージョン堅牢なソリューションを提供します:

1.統計テーブルを作成します:

行数を保存するために「stats」という名前の専用テーブルを作成します:

CREATE TABLE stats (`key` varchar(50) NOT NULL PRIMARY KEY, `value` varchar(100) NOT NULL);
ログイン後にコピー

2。イベントのスケジュールを設定します:

MySQL のイベント スケジューラを使用して「update_stats」という名前のイベントを設定し、行数で統計テーブルを定期的に更新します:

CREATE EVENT update_stats
ON SCHEDULE
  EVERY 5 MINUTE
DO
  INSERT INTO stats (`key`, `value`)
  VALUES ('data_count', (select count(id) from data))
  ON DUPLICATE KEY UPDATE value=VALUES(value);
ログイン後にコピー

利点:

このソリューションにはいくつかの利点があります。

  • 自己完結型: 外部スクリプトやキュー管理の必要性を回避します。
  • カスタマイズ可能: 更新頻度は、カウントの必要な鮮度に基づいてカスタマイズできます。
  • 効率的なカウント取得: を実行するのではなく、統計テーブルからカウントを取得することによってライブ COUNT(*) クエリの場合、パフォーマンスが大幅に向上します。

以上がパフォーマンスを向上させるために InnoDB テーブルの COUNT(*) クエリを最適化する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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