Postgres Neuling hier.
Ich frage mich, ob diese Abfrage optimiert ist oder nicht. Ich habe versucht, nur die Werte zu verbinden, die zu 100% erforderlich sind, und alle dynamischen Bedingungen in der WHERE-Klausel zu belassen. Siehe unten.
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;
Hinweis: Für den Kontext prüft dieser Prozess, ob ein Benutzer auch ein Mitarbeiter ist (erhöhte Berechtigungen / anderer Benutzertyp).
Wie auch immer, ist das der richtige Weg? Sollte JOIN ON weitere Anweisungen enthalten, z. B. die Überprüfung auf expired_at IS NULL? Warum oder warum macht das keinen Sinn?
SELECT version();
)