ホームページ  >  記事  >  データベース  >  インデックスと統計キャッシュを使用して InnoDB 上の COUNT(*) パフォーマンスを最適化するにはどうすればよいですか?

インデックスと統計キャッシュを使用して InnoDB 上の COUNT(*) パフォーマンスを最適化するにはどうすればよいですか?

DDD
DDDオリジナル
2024-11-03 12:52:30419ブラウズ

How Can I Optimize COUNT(*) Performance on InnoDB with Indices and Statistical Caching?

インデックスを使用した InnoDB での COUNT(*) パフォーマンスの最適化

大きくても狭い InnoDB テーブルを扱う場合、COUNT(*) クエリの実行が非常に遅くなることがあります。これは、約 900 万レコードで構成されるテーブルで 6 秒の COUNT(*) 操作が発生するシナリオで発生しました。

MySQL ドキュメントによると、InnoDB でカウント操作にインデックスを使用することを強制すると、大幅なパフォーマンスが得られる可能性があります。利益が得られます。これは、クエリで USE INDEX (index_name) 構文を使用することによって実現されます。

この例では、次のクエリが使用されています。

<code class="sql">SELECT COUNT(id) FROM perf2 USE INDEX (PRIMARY);</code>

ただし、インデックスを使用しているにもかかわらず、パフォーマンスはひどいままだった。さらにトラブルシューティングのオプションを探していると、MySQL 5.1.6 ではイベント スケジューラと統計キャッシュを含む効率的なソリューションが導入されていることがわかりました。

イベント スケジューラと統計キャッシュ

イベント スケジューラを利用し、統計テーブルを使用すると、COUNT(*) 操作を大幅に最適化できます。このプロセスには、カウント データを保存するための統計テーブルの作成が含まれます:

<code class="sql">CREATE TABLE stats (`key` VARCHAR(50) NOT NULL PRIMARY KEY, `value` VARCHAR(100) NOT NULL);</code>

その後、現在のカウントで統計テーブルを定期的に更新するイベントが作成されます:

<code class="sql">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);</code>

This self - を含むソリューションにより、更新間隔をカスタマイズできるため、保存されたカウントの精度と鮮度が保証されます。完璧ではないかもしれませんが、従来の方法と比較してパフォーマンスが大幅に向上します。

以上がインデックスと統計キャッシュを使用して InnoDB 上の COUNT(*) パフォーマンスを最適化するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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