ホームページ  >  記事  >  データベース  >  大規模な MySQL テーブルでの行カウント クエリを高速化するにはどうすればよいですか?

大規模な MySQL テーブルでの行カウント クエリを高速化するにはどうすればよいですか?

DDD
DDDオリジナル
2024-11-19 16:46:03359ブラウズ

How Can I Speed Up Row Counting Queries in Large MySQL Tables?

MySQL での行カウントの高速化

問題:

大きなテーブル内の行数をカウントするための MySQL クエリまたは特定の列でグループ化すると、テーブルが大きくなるにつれて速度が遅くなる可能性があります。グループ化に使用される列にインデックスを付けても、一貫してパフォーマンスが向上するわけではありません。

探索:

これらのクエリを最適化するには、キャッシュを使用しない代替アプローチとして次のものが挙げられます。

  • 列ベースのストレージ エンジンの使用:このアプローチにより count(*) クエリが改善される可能性がありますが、他の操作のパフォーマンスが低下する可能性があります。
  • 概要テーブルの維持: トリガーは、行が挿入または削除されるたびに別の概要テーブルを更新できます。 、または更新されました。このアプローチにより、SELECT 操作中に即座に行カウントが提供されます。

実装:

概要テーブルを維持するには、次の定型トリガーを使用できます。

DELIMITER //

CREATE TRIGGER ai_books AFTER INSERT ON books
FOR EACH ROW UPDATE books_cnt SET total = total + 1 WHERE status = NEW.status
//
CREATE TRIGGER ad_books AFTER DELETE ON books
FOR EACH ROW UPDATE books_cnt SET total = total - 1 WHERE status = OLD.status;
//
CREATE TRIGGER au_books AFTER UPDATE ON books
FOR EACH ROW
BEGIN
    IF (OLD.status <> NEW.status)
    THEN
        UPDATE books_cnt SET total = total + IF(status = NEW.status, 1, -1) WHERE status IN (OLD.status, NEW.status);
    END IF;
END
//

サマリーテーブルを維持することで、テーブルに関係なく、行カウントクエリをより高速に実行できます。サイズ。

以上が大規模な MySQL テーブルでの行カウント クエリを高速化するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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