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

我会避免这两种方法。AND您应该能够通过明智地使用、ORIS 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 <your select query here>
于 2012-05-09T16:42:42.317 回答