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 サイトの他の関連記事を参照してください。