9 Stimmen

CASE oder COALESCE Leistung in WHERE-Klausel für MySQL

Ich frage mich, was ist die bessere Leistung oder beste Praxis beim Umgang mit mehreren Kriterien in der WHERE-Klausel und NULL-Werte.

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

OR

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

15voto

Ike Walker Punkte 62083

Ich würde diese beiden Ansätze vermeiden. Sie sollten in der Lage sein, das, was Sie zu tun versuchen, mit einem vernünftigen Einsatz von AND , OR , IS NULL und Klammern.

Sie können dies zum Beispiel umschreiben:

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

Zum Beispiel so:

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

Und Sie können das umschreiben:

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

Wie dies:

WHERE
(user_id IS NOT NULL AND LENGTH(user_id) > 0 AND u.id = user_id)
OR
(su.custom_id = student_number)

0voto

Rahul Punkte 73710

Ich würde vorschlagen, dass Sie erklären und sehen Sie, wie Ihr Abfrageplan aussieht. Zum Beispiel:

explain <your select query here>

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X