問題:
約 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);
利点:
このソリューションにはいくつかの利点があります。
以上がパフォーマンスを向上させるために InnoDB テーブルの COUNT(*) クエリを最適化する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。