MySQL: 一意の値に対する SELECT DISTINCT と GROUP BY
MySQL テーブルから一意の値を取得する場合、SELECT DISTINCT
と GROUP BY
は同じように見えるかもしれませんが、パフォーマンスは大きく異なる可能性があります。 この記事では、それらの効率を比較します。
シナリオ: ユニークな職業の検索
'XYZ' の従業員の users
テーブルから固有の職業を取得するクエリを考えてみましょう:
<code class="language-sql">SELECT u.profession FROM users u WHERE u.employer = 'XYZ' ORDER BY u.profession</code>
一意の職業のみが返されるようにするには、SELECT DISTINCT
または GROUP BY
を使用します。
オプション 1: SELECT DISTINCT
<code class="language-sql">SELECT DISTINCT u.profession FROM users u WHERE u.employer = 'XYZ' ORDER BY u.profession</code>
オプション 2: GROUP BY
<code class="language-sql">SELECT u.profession FROM users u WHERE u.employer = 'XYZ' GROUP BY u.profession ORDER BY u.profession</code>
パフォーマンスに関する考慮事項
どちらのクエリでも同じ出力が生成されますが、一般に SELECT DISTINCT
の方がパフォーマンスが優れています。 MySQL は、ビットマップやハッシュ テーブルなどの手法を使用して SELECT DISTINCT
を最適化し、単一パスで重複を効率的にフィルタリングします。 逆に、GROUP BY
では行のグループ化と追加の集計オーバーヘッドが発生し、クエリの実行が遅くなる可能性があります。
例外: GROUP BY
の方が速い可能性がある場合
通常は SELECT DISTINCT
が優先されますが、特定の状況では GROUP BY
がそれを上回ることがあります。 ORDER BY
句に profession
列を超える列が含まれている場合、GROUP BY
が優れた最適化を提供する可能性があります。
おすすめ
MySQL で一意の値を取得するには、通常、SELECT DISTINCT
がより効率的な選択肢です。 ただし、アプリケーションに最適なアプローチを決定するには、特定のデータを使用して両方のクエリをベンチマークすることが重要です。
以上がSELECT DISTINCT と GROUP BY: MySQL での一意の値の取得はどちらが速いですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。