En términos de rendimiento, su consulta se ve bien. ¿Lo has medido para ver si realmente hay algún problema?
Si (object1_id, object2_id)
es único, entonces puede escribir la consulta de manera más concisa de la siguiente manera:
SELECT object1_id
FROM composition
WHERE object2_id IN (id1, id2, ..., id6)
GROUP BY object1_id
HAVING COUNT(*) = 6
Tenga en cuenta que el 6
es el número de ID proporcionados. Esto debe cambiarse si se proporciona un número diferente de ID. Tendría que medir el rendimiento real en su data para ver si esto aumenta la velocidad.
Si no puede asumir la singularidad, esto debería funcionar:
SELECT object1_id
FROM composition
WHERE object2_id IN (id1, id2, ..., id6)
GROUP BY object1_id
HAVING COUNT(DISTINCT object2_id) = 6
Sin embargo, lo más importante es asegurarse de tener los índices apropiados. en tu mesa! Esto está lejos más importante que si escribes una consulta u otra.