4

JOIN 句または WHERE 句に SQL 条件を含める方が良いですか? SQL エンジンはどちらの方法でも最適化されていますか? エンジンにもよる?

JOIN 句の条件を WHERE 句の条件に置き換えることは常に可能ですか?

条件の意味を説明するための例

SELECT      role_.name
FROM        user_role
INNER JOIN  user ON user_role.user_id_ = user.id AND
                    user_role.user_id_ = @user_id
INNER JOIN  role ON user_role.role_id = role_.id

対。

SELECT      role_.name
FROM        user_role
INNER JOIN  user ON user_role.user_id_ = user.id
INNER JOIN  role ON user_role.role_id = role_.id
WHERE       user.id = @user_id
4

3 に答える 3

7

INNER JOIN を使用する場合、JOIN 句の SQL 条件と WHERE 条件の SQL 条件は同等です。

それ以外の場合、条件に基づいて行を一致させた後以外に LEFT/RIGHT などの他の JOIN を使用すると、別のステップが発生し、OUTER ROWS が追加されます。つまり、行が一致しません。

WHERE 条件は、一致しないすべての行を単純に除外します。

このスレッドを参照してください

于 2013-05-05T05:46:46.777 に答える
4

結合句に非キー条件を含めることは問題ないだけでなく、on 句が属するテーブルにさらに結合される他のテーブルへの結合を回避できるため、特にこのクエリでは好ましいです。

Where 句は、すべての結合が行われた後に評価されます。これは、結果セットに対するフィルターです。ただし、結合句に条件を入れることで、行が結合されているときに行が結合されないようにすることができます。

あなたの場合、次のテーブルがないため、違いはありませんが、クエリのパフォーマンスを向上させるために彼の手法を頻繁に使用します。

于 2013-05-05T05:52:05.437 に答える