インデックスを使用した InnoDB での COUNT(*) パフォーマンスの最適化
大規模な InnoDB テーブル内のレコードのカウントは、パフォーマンスのボトルネックになる可能性があります。デフォルトのメソッド COUNT(*) は、特に数百万のレコードを持つ大規模なテーブルの場合、時間がかかる可能性があります。
パフォーマンスを向上させる 1 つの手法は、InnoDB に count 操作のインデックスの使用を強制することです。質問で述べたように、ステートメント SELECT COUNT(id) FROM perf2 USE INDEX (PRIMARY); を使用すると、論理的なアプローチのように思えるかもしれません。ただし、この方法の成功は限定的であることがわかっています。
代替ソリューション: イベント スケジューラと統計テーブル
MySQL バージョン 5.1.6 以降では、代替ソリューションが使用されています。が現れた。この方法では、イベント スケジューラと統計テーブルを利用してレコード数を定期的に更新および保存します。
統計テーブルの作成:
というテーブルを作成します。 stats を使用してカウント情報を保持します。
CREATE TABLE stats ( `key` varchar(50) NOT NULL PRIMARY KEY, `value` varchar(100) NOT NULL );
イベントの作成:
統計テーブルを 5 分ごとに自動的に更新するように 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(*) のパフォーマンスを最適化するための実行可能なオプションを提供します。イベント スケジューラと統計テーブルのアプローチは、自己完結型のカスタマイズ可能なソリューションを提供し、追加のツールや複雑なインデックス構造を必要とせずにカウント操作のパフォーマンスを向上させることができます。
以上がインデックス構造に依存せずに InnoDB テーブルで COUNT(*) のパフォーマンスを最適化するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。