När det gäller prestanda ser din fråga OK ut. Har du mätt det för att se om det verkligen är ett problem?
Om (object1_id, object2_id)
är unik så kan du skriva frågan mer kortfattat enligt följande:
SELECT object1_id
FROM composition
WHERE object2_id IN (id1, id2, ..., id6)
GROUP BY object1_id
HAVING COUNT(*) = 6
Observera att 6
är antalet tillhandahållna ID:n. Detta bör ändras om ett annat antal ID:n tillhandahålls. Du skulle behöva mäta den faktiska prestandan på din dadta för att se om detta ger någon hastighetsökning.
Om du inte kan anta unikhet bör detta fungera:
SELECT object1_id
FROM composition
WHERE object2_id IN (id1, id2, ..., id6)
GROUP BY object1_id
HAVING COUNT(DISTINCT object2_id) = 6
Det viktigaste är dock att se till att du har lämpliga index på ditt bord! Det här är långt viktigare än om du skriver den ena eller den andra frågan.