Postgres principiante qui.
Mi chiedo se questa query sia ottimizzata o no? Ho provato a JOIN ON solo i valori necessari al 100% e lasciando tutte le condizioni dinamiche nella clausola WHERE. Vedi sotto.
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: per il contesto, questo proc sta verificando se un utente è anche un dipendente (privilegi elevati / tipo di utente diverso).
Comunque, è questa la strada giusta da percorrere? JOIN ON dovrebbe contenere più istruzioni come il controllo di expired_at IS NULL, ad esempio? Perché o perché questo non ha senso?
SELECT version();
)