ホームページ  >  記事  >  データベース  >  MySQL での行カウント クエリを高速化し、ほぼ瞬時の結果を得るにはどうすればよいですか?

MySQL での行カウント クエリを高速化し、ほぼ瞬時の結果を得るにはどうすればよいですか?

DDD
DDDオリジナル
2024-11-22 04:47:10285ブラウズ

How Can I Speed Up Row Counting Queries in MySQL for Near-Instantaneous Results?

MySQL での行カウントの高速化: パフォーマンス向上のためのテクニックの探索

大きな MySQL テーブルの行カウントは時間のかかる作業になる場合があります、特にテーブルに数百万行が含まれている場合。関連する列にインデックスが存在するにもかかわらず、行数のクエリの実行には数秒かかる場合があります。

このシナリオでは、テーブル内のステータスごとに行をカウントするクエリを高速化するという課題を検討します。次の列:

  • id (主キー)
  • title (書籍title)
  • status (本の現在の状態)

InnoDB と MyISAM ストレージ エンジンの両方を使用して、200 万行のテーブルでこのようなクエリのパフォーマンスをテストした結果、次のことがわかりました。その結果:

  • MyISAM は、クエリ実行時間が 0.9 ~ 1.1 で、より高速なパフォーマンスを示しました。
  • InnoDB の場合、クエリ実行時間は 3.0 ~ 3.2 秒と大幅に長くかかりました。

MyISAM はパフォーマンスに若干の利点をもたらしますが、行数を増やす必要があるシナリオには依然として不十分です。低トラフィックの Web ページ リクエストなど、非常に短い時間枠内で計算されるsite.

残念ながら、代替技術に頼らずに直接行カウントクエリのパフォーマンスを劇的に向上させる簡単な方法はありません。実行可能なオプションの 1 つは、各ステータスの行数を追跡する要約テーブルを維持することです。この概要テーブルはトリガーを介して更新できるため、書籍のステータスが変化するたびにカウントが適切に調整されます。

このソリューションは、直接取得するため、メイン テーブルのサイズに関係なく、即時のクエリ応答を提供します。概要テーブルからの情報の一部。トリガーを利用することで、概要テーブルのメンテナンスが自動化され、キャッシュや明示的な更新の必要がなくなります。

トリガーに関連する追加のオーバーヘッドにもかかわらず、ほぼ瞬時に行をカウントできる利点は、潜在的なパフォーマンスへの影響を上回ります。サマリー テーブルのアプローチを利用することで、行カウントに関連するパフォーマンスの問題に対処でき、リアルタイムのユースケースに適したものになります。

以上がMySQL での行カウント クエリを高速化し、ほぼ瞬時の結果を得るにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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