Postgres初心者はこちら。
このクエリが最適化されているかどうか疑問に思っていますか?100%必要な値だけを結合し、すべての動的条件をWHERE句に残そうとしました。下記参照。
SELECT *
FROM
myapp_employees
JOIN myapp_users ON
myapp_users.user_id=myapp_employees.user_id
JOIN myapp_contacts_assoc ON
myapp_contacts_assoc.user_id=myapp_users.user_id
JOIN myapp_contacts ON
myapp_contacts.contact_id=myapp_contacts_assoc.contact_id
WHERE
myapp_contacts.value='test@gmail.com' AND
myapp_contacts.type=(1)::INT2 AND
myapp_contacts.is_primary=(1)::INT2 AND
myapp_contacts.expired_at IS NULL AND
myapp_employees.status=(1)::INT2 AND
myapp_users.status=(1)::INT2
LIMIT 1;
注:コンテキストについては、このプロシージャはユーザーが従業員でもあるかどうかを確認しています(昇格された特権/別のユーザータイプ)。
とにかく、これは正しい方法ですか?たとえば、JOIN ONには、expired_at IS NULLのチェックなど、より多くのステートメントを含める必要がありますか?なぜ、またはなぜこれが意味をなさないのですか?
SELECT version();
)