6

WHERE 句と NULL 値で複数の条件を処理する場合、どちらがより良いパフォーマンスまたはベスト プラクティスであるか疑問に思っています。

WHERE
    u.id = COALESCE(user_id, u.id) AND
    su.custom_id = COALESCE(student_number, su.custom_id)

また

WHERE
CASE 
    WHEN user_id IS NOT NULL AND LENGTH(user_id) > 0
    THEN
        u.id = user_id 
    ELSE
        su.custom_id = student_number
    END
4

2 に答える 2

13

私はこれらのアプローチの両方を避けます。ANDORIS NULL、および括弧を適切に使用することで、目的を達成できるはずです。

たとえば、次のように書き換えることができます。

WHERE
    u.id = COALESCE(user_id, u.id) AND
    su.custom_id = COALESCE(student_number, su.custom_id)

このような:

WHERE
    (user_id IS NULL OR u.id = user_id) AND
    (su.custom_id = student_number) 

そして、これを次のように書き換えることができます:

WHERE
CASE 
    WHEN user_id IS NOT NULL AND LENGTH(user_id) > 0
    THEN
        u.id = user_id 
    ELSE
        su.custom_id = student_number
    END

このように:

WHERE
(user_id IS NOT NULL AND LENGTH(user_id) > 0 AND u.id = user_id)
OR
(su.custom_id = student_number)
于 2012-05-09T16:47:20.660 に答える
0

Explainと seehowを使用してクエリ プランを確認することをお勧めします。お気に入り:

explain <your select query here>
于 2012-05-09T16:42:42.317 に答える