Pod względem wydajności Twoje zapytanie wygląda OK. Czy zmierzyłeś go, aby sprawdzić, czy naprawdę jest problem?
Jeśli (object1_id, object2_id)
jest unikalny, możesz napisać zapytanie bardziej zwięźle w następujący sposób:
SELECT object1_id
FROM composition
WHERE object2_id IN (id1, id2, ..., id6)
GROUP BY object1_id
HAVING COUNT(*) = 6
Zauważ, że 6
to liczba dostarczonych identyfikatorów. Należy to zmienić, jeśli podana zostanie inna liczba identyfikatorów. Musiałbyś zmierzyć rzeczywistą wydajność na swoim dadta, aby zobaczyć, czy to daje jakikolwiek wzrost prędkości.
Jeśli nie możesz założyć wyjątkowości, to powinno działać:
SELECT object1_id
FROM composition
WHERE object2_id IN (id1, id2, ..., id6)
GROUP BY object1_id
HAVING COUNT(DISTINCT object2_id) = 6
Najważniejszą rzeczą jest jednak upewnienie się, że masz odpowiednie indeksy na twoim stole! To jest daleko ważniejsze niż to, czy piszesz jedno czy drugie zapytanie.