С точки зрения производительности ваш запрос выглядит нормально.Вы измерили его, чтобы увидеть, действительно ли существует проблема?
Если (object1_id, object2_id)
уникален, вы можете написать запрос более кратко следующим образом:
SELECT object1_id
FROM composition
WHERE object2_id IN (id1, id2, ..., id6)
GROUP BY object1_id
HAVING COUNT(*) = 6
Обратите внимание, что 6
количество предоставленных идентификаторов.Это следует изменить, если указано другое количество идентификаторов.Вам нужно измерить фактическую производительность вашей дадты, чтобы увидеть, дает ли это какое-либо увеличение скорости.
Если вы не можете предполагать уникальность, тогда это должно работать:
SELECT object1_id
FROM composition
WHERE object2_id IN (id1, id2, ..., id6)
GROUP BY object1_id
HAVING COUNT(DISTINCT object2_id) = 6
Самое важноеТем не менее, нужно убедиться, что у вас на столе есть indexes !Это далеко важнее, чем когда вы пишете один или другой запрос.