In Bezug auf die Leistung sieht Ihre Abfrage in Ordnung aus. Haben Sie es gemessen, um zu sehen, ob es wirklich ein Problem gibt?
Wenn (object1_id, object2_id)
eindeutig ist, können Sie die Abfrage wie folgt prägnanter schreiben:
SELECT object1_id
FROM composition
WHERE object2_id IN (id1, id2, ..., id6)
GROUP BY object1_id
HAVING COUNT(*) = 6
Beachten Sie, dass die 6
ist die Anzahl der bereitgestellten IDs. Dies sollte geändert werden, wenn eine andere Anzahl von IDs bereitgestellt wird. Sie müssten die tatsächliche Leistung Ihrer Daten messen, um zu sehen, ob dies zu einer Geschwindigkeitssteigerung führt.
Wenn Sie keine Eindeutigkeit annehmen können, sollte dies funktionieren:
SELECT object1_id
FROM composition
WHERE object2_id IN (id1, id2, ..., id6)
GROUP BY object1_id
HAVING COUNT(DISTINCT object2_id) = 6
Das Wichtigste ist jedoch sicherzustellen, dass Sie geeignete Indizes haben auf deinem Tisch! Das ist weit wichtiger, als ob Sie die eine oder andere Abfrage schreiben.