各グループから 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
このクエリはサブクエリでグループ化と集計を実行するため、結果が向上します。パフォーマンス。
その他のパフォーマンスのヒント:
複数行選択:
各グループから複数の行を取得する必要がある場合は、次のクエリを使用できます:
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 サイトの他の関連記事を参照してください。