ホームページ > データベース > mysql チュートリアル > 大規模なデータベース テーブルからグループごとに 1 行を効率的に選択するにはどうすればよいですか?

大規模なデータベース テーブルからグループごとに 1 行を効率的に選択するにはどうすればよいですか?

Barbara Streisand
リリース: 2024-12-31 01:04:08
オリジナル
273 人が閲覧しました

How to Efficiently Select One Row per Group from a Large Database Table?

各グループから 1 つの行を効率的に選択する

数百万のレコードを持つ大規模な製品テーブルでは、クエリの最適化はパフォーマンスにとって非常に重要です。一般的なシナリオは、各ストアの最大 ID など、特定の列に基づいてテーブルの各グループから 1 行を取得することです。

元のクエリとパフォーマンスの問題:

このタスクに使用された最初のクエリは次のとおりです:

SELECT id, product_name, store_id
FROM product
GROUP BY store_id
ORDER BY id.
ログイン後にコピー

ただし、このクエリはグループ化と集計操作が関係します。

推奨されるアプローチ:

効率的な解決策は、サブクエリを使用して各ストアの最大 ID を決定し、それをメイン テーブルに結合することです。

SELECT  a.*
FROM    tableName a
        INNER JOIN
        (
            SELECT  store_ID, MAX(ID) max_ID
            FROM    tableName
            GROUP BY store_ID
        ) b ON a.store_ID = b.store_ID AND
                a.ID = b.max_ID
ログイン後にコピー

このクエリはサブクエリでグループ化と集計を実行するため、結果が向上します。パフォーマンス。

その他のパフォーマンスのヒント:

  • テーブルの ID 列と store_id 列にインデックスがあることを確認してください。
  • データベースの使用を検討してください。並列化と最適化をサポートするサーバー

複数行選択:

各グループから複数の行を取得する必要がある場合は、次のクエリを使用できます:

SELECT ID, product_Name, store_ID
FROM   tableName a
WHERE
  (
     SELECT COUNT(*) 
     FROM   tableName b
     WHERE  b.store_ID = a.store_ID AND b.ID >= a.ID
  ) <= 2;
ログイン後にコピー

このクエリは、ID 列に基づいて各グループから最大 2 行を取得します。

以上が大規模なデータベース テーブルからグループごとに 1 行を効率的に選択するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート