ホームページ >データベース >mysql チュートリアル >SQL で最大値と対応するデータを効率的に取得するにはどうすればよいですか?
SQL クエリの最適化: 最大値と関連データの取得
この記事では、大規模な SQL テーブルから各 ID とそれに対応するタグの最大バージョン番号を取得する効率的な方法を説明します。 ネストされたクエリや単純なグループ化など、効率性の低い方法は避けてください。
最適解は ROW_NUMBER()
関数を使用します:
<code class="language-sql">SELECT s.id, s.tag, s.version FROM ( SELECT t.*, ROW_NUMBER() OVER(PARTITION BY t.id ORDER BY t.version DESC) AS rnk FROM YourTable t ) s WHERE s.rnk = 1;</code>
このクエリの仕組みは次のとおりです:
t.*
からすべての列 (YourTable
) が選択されます (YourTable
を実際のテーブル名に置き換えます)。 重要なのは、各 rnk
パーティション内の各行にランク (id
) を version
の降順で割り当てます。 各 version
の最高の id
には 1 のランクが与えられます。rnk = 1
である行のみを選択します。 これにより、一意の各 version
の最大 id
とそれに関連付けられた tag
および id
が効率的に分離されます。
を使用すると、特に大規模なデータセットの場合、他のアプローチに比べてパフォーマンスが大幅に向上します。 これにより、ネストされたクエリや集計関数を使用した ROW_NUMBER()
句のパフォーマンスのオーバーヘッドが回避され、このシナリオで効率的なデータ取得に推奨される方法になります。GROUP BY
以上がSQL で最大値と対応するデータを効率的に取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。