ホームページ > データベース > mysql チュートリアル > MySQL Group By クエリで各グループの最後の行を効率的にフェッチするにはどうすればよいですか?

MySQL Group By クエリで各グループの最後の行を効率的にフェッチするにはどうすればよいですか?

Patricia Arquette
リリース: 2024-11-14 18:44:02
オリジナル
264 人が閲覧しました

How to Efficiently Fetch the Last Row for Each Group in MySQL Group By Queries?

MySQL Group By Queries での最終行フェッチの最適化

MySQL では、グループ化されたデータ セットの各グループの最後の行を取得する必要があります。効率的なアプローチ。一般的な戦略の 1 つは、相関サブクエリ法です。

select * 
from foo as a
where a.id = (select max(id) from foo where uid = a.uid group by uid)
group by uid;
ログイン後にコピー

この方法は機能しますが、計算コストが高くなる可能性があります。より効率的な代替方法は、次のクエリに示すように、サブクエリとの結合を使用することです。

SELECT t1.* FROM foo t1
JOIN (SELECT uid, MAX(id) id FROM foo GROUP BY uid) t2
ON t1.id = t2.id AND t1.uid = t2.uid;
ログイン後にコピー

このアプローチでは、サブクエリ内の各グループの最大 ID を事前に計算することでパフォーマンスを最適化します。この事前に計算された値を結合することで、クエリは各グループの最後の行を効率的に取得できます。

さらに、両方のクエリで EXPLAIN を使用すると、実行計画とリソース消費に関する貴重な洞察が得られ、さらなる最適化が可能になります。 。もう 1 つの方法は、LEFT JOIN メソッドを使用することです。

SELECT t1.* FROM foo t1
LEFT JOIN foo t2
ON t1.id < t2.id AND t1.uid = t2.uid
WHERE t2.id is NULL;
ログイン後にコピー

このクエリは、後続の行を左結合し、null 以外の ID 値を持つ行を除外することによって、各グループの最後の行を識別します。最終的に、最適化アプローチの選択は、アプリケーションの特定のデータとパフォーマンス要件によって決まります。

以上がMySQL Group By クエリで各グループの最後の行を効率的にフェッチするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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