Em termos de desempenho, sua consulta parece boa. Você já mediu para ver se realmente há um problema?
Se
(object1_id, object2_id)
for exclusivo, você poderá escrever a consulta de forma mais concisa da seguinte maneira:SELECT object1_id
FROM composition
WHERE object2_id IN (id1, id2, ..., id6)
GROUP BY object1_id
HAVING COUNT(*) = 6
Observe que o
6
é o número de IDs fornecidos. Isso deve ser alterado se um número diferente de IDs for fornecido. Você teria que medir o desempenho real em seus dados para ver se isso aumenta a velocidade. Se você não pode assumir exclusividade, isso deve funcionar:
SELECT object1_id
FROM composition
WHERE object2_id IN (id1, id2, ..., id6)
GROUP BY object1_id
HAVING COUNT(DISTINCT object2_id) = 6
O mais importante, porém, é garantir que você tenha índices apropriados na sua mesa! Isto é longe mais importante do que escrever uma consulta ou outra.