4

私のアプリケーションでは、2 つの MySQL テーブル、「ユニット」と「インプレッション」が 1 対多の関係にあります。units テーブルからすべての広告ユニットのリストを取得する必要がありますが、各広告ユニットのインプレッション数も取得する必要があります。

このタスクを実行するための 2 つの SELECT クエリがあります (この例では単純化されています)。最初にサブセレクトを使用します。

SELECT 
    (SELECT COUNT(*) FROM impressions WHERE impression_unit_id = unit_id) AS impressions_count,
    unit_id
FROM units;

次に GROUP BY を使用します。

SELECT
    COUNT(impression_id) AS impressions_count,
    unit_id
FROM units
LEFT JOIN impressions ON impression_unit_id = unit_id
GROUP BY unit_id;

サブセレクト クエリはレコード (広告ユニット) ごとに実行されるため、GROUP BY の方がスマートに見えますが、JOIN が 1 つ多くなっています。パフォーマンスのためにどちらを優先しますか?

4

1 に答える 1

3

GROUP BYクエリのパフォーマンスが向上します。クエリオプティマイザは、結合を使用するように最初のクエリを最適化する場合がありますが、依存サブクエリを使用するように記述されているため、これは信頼できません。テーブルに適切なインデックスが付けられている限り、JOINsはパフォーマンスの大きな問題にはなりません。

最初のクエリは、を使用するように最適化されていない場合JOIN、ユニットテーブルの各行に対してサブクエリを実行する必要がありJOINます。クエリはすべてを1回の操作で実行します。

クエリがどのように最適化されるかを確認するにはEXPLAIN、両方のクエリのいずれかを実行します。最初のものが依存サブクエリを使用する場合、それは遅くなります。

于 2013-01-04T20:56:34.907 に答える