SQL mit "WHERE NOT IN"-Bedingung läuft Stunden und kommt nicht zum Ende

Hallo zusammen,

ich hoffe ihr könnt mir evtl. weiterhelfen. Folgender SQL:

select distinct KundenID from Modules where InternalID = 1 and Id not in ( select ModulId from Kunden_Zu_Module)

läuft Stunden und kommt nicht zum Ende. Der Subselect liefert lediglich 170.000 Datensätze. Hat jemand eine Idee, wo das Problem sein könnte?

Vielen Dank im Vorraus!

Was sagt denn Explain?

Vielleicht kommst Du besser mit einem left join und einer IS NULL - Condition.

Hier ist der Plan, allerdings hab ich ihn auf einer Kopie der Datenbank, die deutlich weniger Datensätze hat, ausgeführt da es mit dem 170.000 Datensätze auch mit dem Explain ewig dauert und nicht zum Ende kommt.

(tut mir leid für die schlechte Lesbarkeit des Plans, hab es nicht hinbekommen das es hier eingerückt angezeigt wird).

Das mit dem left join habe ich jetzt mal eingebaut, funktioniert bestens.

Unique (cost=37.86…37.87 rows=1 width=4) (actual time=0.119…0.119 rows=0 loops=1)"
-> Sort (cost=37.86…37.87 rows=1 width=4) (actual time=0.119…0.119 rows=0 loops=1)"
Sort Key: Modules.KundenID"
Sort Method: quicksort Memory: 17kB"
-> Seq Scan on Module (cost=24.25…37.85 rows=1 width=4) (actual time=0.113…0.113 rows=0 loops=1)"
Filter: ((NOT (hashed subplan)) AND (InternalID = 1))"
SubPlan"
-> Seq Scan on Kunden_Zu_Module (cost=0.00…21.40 rows=1140 width=4) (actual time=0.006…0.025 rows=50 loops=1)"
Total runtime: 0.172 ms"

In dem Zuge hätte ich noch eine weitere Frage:
pgAdmin zeigt mir unter Serverstatus den SELECT mit einem ExclusiveLock an. Das erschließt sich mir nicht, es handelt sich doch nur um einen lesenden Zugriff?