ホームページ >データベース >mysql チュートリアル >MySQL で各グループの最後の行を効率的に取得するにはどうすればよいですか?
MySQL の各 'Group By' の '最後の' 行を返す
MySQL でグループ化された各セットの最後の行を効率的に取得するには、共通のタスク。以前のアプローチでは、WHERE 句内でサブクエリを使用するクエリが提案されていました:
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;
このクエリは、JOIN 操作を利用して明示的に元のテーブル (「foo」) を、各一意のユーザー ID の最大 ID 値を含む派生テーブルと結合します。 ON 句により、ID とユーザー ID が一致する行のみが結合されます。
クエリをさらに最適化するには、グループ化と結合に使用される「uid」列にインデックスを作成することをお勧めします。 。 EXPLAIN を利用すると、クエリの実行計画について洞察が得られ、潜在的なパフォーマンスのボトルネックを特定できます。
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;
このクエリではの場合、LEFT JOIN は外部結合を実行し、「uid」および「id」基準に基づいて「foo」の行を照合します。 WHERE 句により、同じグループ内で後続行のない行のみが選択されるようになり、各ユーザー ID の最後の行が効果的に返されます。
代替アプローチを検討し、インデックス作成と EXPLAIN 分析を通じてクエリを最適化することで、 MySQL の各「group by」の最後の行を効率的に取得することが可能です。
以上がMySQL で各グループの最後の行を効率的に取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。