Novato no Postgres aqui.
Gostaria de saber se esta consulta está otimizada ou não? Tentei JOIN ON apenas os valores que são 100% necessários e deixando todas as condições dinâmicas na cláusula WHERE. Ver abaixo.
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;
Nota: Por contexto, este processo está verificando se um usuário também é um funcionário (privs elevados / tipo de usuário diferente).
Enfim, este é o caminho certo a seguir? O JOIN ON deve conter mais instruções, como a verificação de expired_at IS NULL, por exemplo? Por que ou por que isso não faz sentido?
SELECT version();
)