get_customer_trans()
ist keine Tabelle - wahrscheinlich eine gespeicherte Prozedur, daher ist die Abfrage nicht wirklich trivial. Sie müssen sich ansehen, was diese gespeicherte Prozedur wirklich tut, um zu verstehen, warum sie möglicherweise langsam arbeitet.
Unabhängig vom Verhalten der gespeicherten Prozedur sollte das Hinzufügen des folgenden Index jedoch sehr hilfreich sein:
CREATE INDEX do_not_email_tbl_idx1
ON do_not_email_tbl(do_not_email_address);
Dieser Index lässt NOT IN
zu Abfrage, um schnell eine Antwort zurückzugeben. Jedoch NOT IN
hat bekanntermaßen Probleme mit älteren PostgreSQL-Versionen - stellen Sie also sicher, dass Sie mindestens PostgreSQL 9.1 oder höher ausführen.
AKTUALISIEREN . Versuchen Sie, Ihre Abfrage zu ändern in:
SELECT t.*
FROM get_customer_trans() AS t
WHERE NOT EXISTS (
SELECT 1
FROM do_not_email_tbl
WHERE do_not_email_address = t.user_email
LIMIT 1
)
Diese Abfrage verwendet NOT IN
nicht , und sollte schnell funktionieren. Ich denke, dass diese Abfrage in PostgreSQL 9.2 so schnell funktionieren sollte wie eine mit NOT IN
obwohl.